Merge branch 'libyang2' of https://github.com/CESNET/libyang into libyang2
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 31662ba..f15b60f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -158,6 +158,7 @@
src/set.c
src/context.c
src/tree_schema.c
+ src/tree_schema_helpers.c
src/parser_yang.c
src/xml.c)
diff --git a/models/ietf-datastores@2017-08-17.h b/models/ietf-datastores@2017-08-17.h
new file mode 100644
index 0000000..e6ade3a
--- /dev/null
+++ b/models/ietf-datastores@2017-08-17.h
@@ -0,0 +1,196 @@
+unsigned char ietf_datastores_2017_08_17_yang[] = {
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d,
+ 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x7b,
+ 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x31, 0x2e, 0x31, 0x3b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x20, 0x22, 0x75, 0x72, 0x6e, 0x3a, 0x69, 0x65, 0x74, 0x66,
+ 0x3a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x78, 0x6d, 0x6c, 0x3a,
+ 0x6e, 0x73, 0x3a, 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x69, 0x65, 0x74, 0x66,
+ 0x2d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x22,
+ 0x3b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x64, 0x73, 0x3b, 0x6f,
+ 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x22, 0x49, 0x45, 0x54, 0x46, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+ 0x6b, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x28,
+ 0x4e, 0x45, 0x54, 0x4d, 0x4f, 0x44, 0x29, 0x20, 0x57, 0x6f, 0x72, 0x6b,
+ 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3b, 0x63,
+ 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x0a, 0x22, 0x57, 0x47, 0x20, 0x57,
+ 0x65, 0x62, 0x3a, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70, 0x73,
+ 0x3a, 0x2f, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x74, 0x72, 0x61, 0x63, 0x6b,
+ 0x65, 0x72, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f,
+ 0x77, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x6d, 0x6f, 0x64, 0x2f, 0x3e, 0x0a,
+ 0x0a, 0x20, 0x57, 0x47, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x3a, 0x20, 0x20,
+ 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6e, 0x65, 0x74, 0x6d,
+ 0x6f, 0x64, 0x40, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x3e,
+ 0x0a, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20,
+ 0x20, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x20, 0x42, 0x6a, 0x6f, 0x72,
+ 0x6b, 0x6c, 0x75, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f,
+ 0x3a, 0x6d, 0x62, 0x6a, 0x40, 0x74, 0x61, 0x69, 0x6c, 0x2d, 0x66, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x3e, 0x0a, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x3a, 0x20, 0x20, 0x20, 0x4a, 0x75, 0x65, 0x72, 0x67, 0x65, 0x6e,
+ 0x20, 0x53, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64,
+ 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x2e,
+ 0x73, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65,
+ 0x72, 0x40, 0x6a, 0x61, 0x63, 0x6f, 0x62, 0x73, 0x2d, 0x75, 0x6e, 0x69,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x3e, 0x0a,
+ 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20, 0x20,
+ 0x50, 0x68, 0x69, 0x6c, 0x20, 0x53, 0x68, 0x61, 0x66, 0x65, 0x72, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
+ 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x70, 0x68, 0x69, 0x6c, 0x40,
+ 0x6a, 0x75, 0x6e, 0x69, 0x70, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74, 0x3e,
+ 0x0a, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20,
+ 0x20, 0x4b, 0x65, 0x6e, 0x74, 0x20, 0x57, 0x61, 0x74, 0x73, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6b, 0x77, 0x61, 0x74,
+ 0x73, 0x65, 0x6e, 0x40, 0x6a, 0x75, 0x6e, 0x69, 0x70, 0x65, 0x72, 0x2e,
+ 0x6e, 0x65, 0x74, 0x3e, 0x0a, 0x0a, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f,
+ 0x72, 0x3a, 0x20, 0x20, 0x20, 0x52, 0x6f, 0x62, 0x20, 0x57, 0x69, 0x6c,
+ 0x74, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x3c, 0x72, 0x77, 0x69, 0x6c, 0x74, 0x6f, 0x6e, 0x40,
+ 0x63, 0x69, 0x73, 0x63, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x22, 0x3b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x73, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x65, 0x74, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x73, 0x2e, 0x0a, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x69,
+ 0x72, 0x73, 0x74, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x6d, 0x73, 0x65,
+ 0x6c, 0x76, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
+ 0x63, 0x6f, 0x6e, 0x64, 0x0a, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x73, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65,
+ 0x73, 0x2e, 0x0a, 0x0a, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67,
+ 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x37, 0x20,
+ 0x49, 0x45, 0x54, 0x46, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f,
+ 0x6e, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x64, 0x20, 0x61, 0x73, 0x0a, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x64,
+ 0x65, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68,
+ 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e,
+ 0x0a, 0x0a, 0x20, 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73,
+ 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f,
+ 0x72, 0x0a, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6d,
+ 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c,
+ 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65,
+ 0x64, 0x20, 0x70, 0x75, 0x72, 0x73, 0x75, 0x61, 0x6e, 0x74, 0x20, 0x74,
+ 0x6f, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
+ 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73,
+ 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69,
+ 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x6d, 0x70, 0x6c,
+ 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x42, 0x53, 0x44, 0x20, 0x4c, 0x69,
+ 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x73, 0x65, 0x74, 0x0a, 0x20, 0x66,
+ 0x6f, 0x72, 0x74, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x2e, 0x63, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x54, 0x72, 0x75, 0x73,
+ 0x74, 0x27, 0x73, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x50, 0x72,
+ 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x52, 0x65,
+ 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x49, 0x45,
+ 0x54, 0x46, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+ 0x0a, 0x20, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x72,
+ 0x75, 0x73, 0x74, 0x65, 0x65, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x69,
+ 0x6e, 0x66, 0x6f, 0x29, 0x2e, 0x0a, 0x0a, 0x20, 0x54, 0x68, 0x69, 0x73,
+ 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x58, 0x58, 0x58, 0x58,
+ 0x0a, 0x20, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
+ 0x77, 0x2e, 0x72, 0x66, 0x63, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72,
+ 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x72, 0x66,
+ 0x63, 0x78, 0x78, 0x78, 0x78, 0x29, 0x3b, 0x20, 0x73, 0x65, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x52, 0x46, 0x43, 0x20, 0x69, 0x74, 0x73, 0x65,
+ 0x6c, 0x66, 0x0a, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c,
+ 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63,
+ 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x37, 0x2d, 0x30, 0x38, 0x2d, 0x31,
+ 0x37, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x22, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x3b, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46,
+ 0x43, 0x20, 0x58, 0x58, 0x58, 0x58, 0x3a, 0x20, 0x4e, 0x65, 0x74, 0x77,
+ 0x6f, 0x72, 0x6b, 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x44, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72,
+ 0x65, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x7b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x22, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73,
+ 0x2e, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+ 0x6c, 0x20, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x0a, 0x22, 0x41, 0x62, 0x73, 0x74,
+ 0x72, 0x61, 0x63, 0x74, 0x20, 0x62, 0x61, 0x73, 0x65, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x73, 0x2e, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x62,
+ 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69,
+ 0x6f, 0x6e, 0x61, 0x6c, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x72, 0x75,
+ 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64,
+ 0x61, 0x74, 0x65, 0x20, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x64, 0x69, 0x64, 0x61, 0x74,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74,
+ 0x79, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x20, 0x7b, 0x62,
+ 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69,
+ 0x6f, 0x6e, 0x61, 0x6c, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x75, 0x70, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
+ 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64,
+ 0x65, 0x64, 0x20, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x3b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54,
+ 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e,
+ 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20, 0x7b, 0x62, 0x61, 0x73,
+ 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x22, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x20, 0x62, 0x61,
+ 0x73, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x64, 0x79, 0x6e, 0x61, 0x6d, 0x69, 0x63, 0x20,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73,
+ 0x2e, 0x22, 0x3b, 0x7d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x20, 0x7b, 0x62, 0x61, 0x73, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x3b, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x6f,
+ 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65,
+ 0x66, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2d,
+ 0x72, 0x65, 0x66, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x66, 0x20, 0x7b, 0x62,
+ 0x61, 0x73, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x22, 0x41, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74,
+ 0x6f, 0x72, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79,
+ 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2e, 0x22,
+ 0x3b, 0x7d, 0x7d, 0x00
+};
diff --git a/models/ietf-datastores@2017-08-17.yang b/models/ietf-datastores@2017-08-17.yang
new file mode 100644
index 0000000..0a5a0fd
--- /dev/null
+++ b/models/ietf-datastores@2017-08-17.yang
@@ -0,0 +1,119 @@
+module ietf-datastores {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-datastores";
+ prefix ds;
+
+ organization
+ "IETF Network Modeling (NETMOD) Working Group";
+
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+
+ WG List: <mailto:netmod@ietf.org>
+
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+
+ Author: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Author: Phil Shafer
+ <mailto:phil@juniper.net>
+
+ Author: Kent Watsen
+ <mailto:kwatsen@juniper.net>
+
+ Author: Rob Wilton
+ <rwilton@cisco.com>";
+
+ description
+ "This YANG module defines two sets of identities for datastores.
+ The first identifies the datastores themselves, the second
+ identifies datastore properties.
+
+ Copyright (c) 2017 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC XXXX
+ (http://www.rfc-editor.org/info/rfcxxxx); see the RFC itself
+ for full legal notices.";
+
+ revision 2017-08-17 {
+ description
+ "Initial revision.";
+ reference
+ "RFC XXXX: Network Management Datastore Architecture";
+ }
+
+ /*
+ * Identities
+ */
+
+ identity datastore {
+ description
+ "Abstract base identity for datastore identities.";
+ }
+
+ identity conventional {
+ base datastore;
+ description
+ "Abstract base identity for conventional configuration
+ datastores.";
+ }
+
+ identity running {
+ base conventional;
+ description
+ "The running configuration datastore.";
+ }
+
+ identity candidate {
+ base conventional;
+ description
+ "The candidate configuration datastore.";
+ }
+
+ identity startup {
+ base conventional;
+ description
+ "The startup configuration datastore.";
+ }
+
+ identity intended {
+ base conventional;
+ description
+ "The intended configuration datastore.";
+ }
+
+ identity dynamic {
+ base datastore;
+ description
+ "Abstract base identity for dynamic configuration datastores.";
+ }
+
+ identity operational {
+ base datastore;
+ description
+ "The operational state datastore.";
+ }
+
+ /*
+ * Type definitions
+ */
+
+ typedef datastore-ref {
+ type identityref {
+ base datastore;
+ }
+ description
+ "A datastore identity reference.";
+ }
+
+}
diff --git a/models/ietf-inet-types@2013-07-15.h b/models/ietf-inet-types@2013-07-15.h
new file mode 100644
index 0000000..514c532
--- /dev/null
+++ b/models/ietf-inet-types@2013-07-15.h
@@ -0,0 +1,1189 @@
+unsigned char ietf_inet_types_2013_07_15_yang[] = {
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d,
+ 0x69, 0x6e, 0x65, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x7b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x22, 0x75,
+ 0x72, 0x6e, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x3a, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x73, 0x3a, 0x78, 0x6d, 0x6c, 0x3a, 0x6e, 0x73, 0x3a, 0x79, 0x61,
+ 0x6e, 0x67, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x2d, 0x69, 0x6e, 0x65, 0x74,
+ 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3b, 0x70, 0x72, 0x65, 0x66,
+ 0x69, 0x78, 0x20, 0x22, 0x69, 0x6e, 0x65, 0x74, 0x22, 0x3b, 0x6f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x49, 0x45, 0x54, 0x46, 0x20, 0x4e, 0x45, 0x54, 0x4d, 0x4f, 0x44, 0x20,
+ 0x28, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x20, 0x44, 0x61, 0x74,
+ 0x61, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x4c,
+ 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x29, 0x20, 0x57, 0x6f, 0x72,
+ 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3b,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x0a, 0x22, 0x57, 0x47, 0x20,
+ 0x57, 0x65, 0x62, 0x3a, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x69, 0x65, 0x74,
+ 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x67, 0x2f, 0x6e, 0x65, 0x74,
+ 0x6d, 0x6f, 0x64, 0x2f, 0x3e, 0x0a, 0x57, 0x47, 0x20, 0x4c, 0x69, 0x73,
+ 0x74, 0x3a, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a,
+ 0x6e, 0x65, 0x74, 0x6d, 0x6f, 0x64, 0x40, 0x69, 0x65, 0x74, 0x66, 0x2e,
+ 0x6f, 0x72, 0x67, 0x3e, 0x0a, 0x0a, 0x57, 0x47, 0x20, 0x43, 0x68, 0x61,
+ 0x69, 0x72, 0x3a, 0x20, 0x44, 0x61, 0x76, 0x69, 0x64, 0x20, 0x4b, 0x65,
+ 0x73, 0x73, 0x65, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f,
+ 0x3a, 0x64, 0x61, 0x76, 0x69, 0x64, 0x2e, 0x6b, 0x65, 0x73, 0x73, 0x65,
+ 0x6e, 0x73, 0x40, 0x6e, 0x73, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0a,
+ 0x0a, 0x57, 0x47, 0x20, 0x43, 0x68, 0x61, 0x69, 0x72, 0x3a, 0x20, 0x4a,
+ 0x75, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x20, 0x53, 0x63, 0x68, 0x6f, 0x65,
+ 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69,
+ 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x2e, 0x73, 0x63, 0x68, 0x6f, 0x65, 0x6e,
+ 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65, 0x72, 0x40, 0x6a, 0x61, 0x63, 0x6f,
+ 0x62, 0x73, 0x2d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74,
+ 0x79, 0x2e, 0x64, 0x65, 0x3e, 0x0a, 0x0a, 0x45, 0x64, 0x69, 0x74, 0x6f,
+ 0x72, 0x3a, 0x20, 0x20, 0x20, 0x4a, 0x75, 0x65, 0x72, 0x67, 0x65, 0x6e,
+ 0x20, 0x53, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64,
+ 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x2e,
+ 0x73, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65,
+ 0x72, 0x40, 0x6a, 0x61, 0x63, 0x6f, 0x62, 0x73, 0x2d, 0x75, 0x6e, 0x69,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x3e, 0x22,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61,
+ 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79,
+ 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x64, 0x65, 0x72, 0x69,
+ 0x76, 0x65, 0x64, 0x0a, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x64, 0x61, 0x74,
+ 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72,
+ 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x68, 0x69, 0x6e, 0x67,
+ 0x73, 0x2e, 0x0a, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
+ 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x33, 0x20, 0x49,
+ 0x45, 0x54, 0x46, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+ 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e,
+ 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x0a,
+ 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d,
+ 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x0a, 0x77,
+ 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x73, 0x20,
+ 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x70, 0x75,
+ 0x72, 0x73, 0x75, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73,
+ 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x20, 0x42, 0x53, 0x44, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65,
+ 0x0a, 0x73, 0x65, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x69,
+ 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x2e,
+ 0x63, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x54,
+ 0x46, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x27, 0x73, 0x20, 0x4c, 0x65,
+ 0x67, 0x61, 0x6c, 0x20, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x6f, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x44, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x65, 0x2e, 0x69, 0x65,
+ 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e,
+ 0x73, 0x65, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x2e, 0x0a, 0x0a, 0x54,
+ 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x36,
+ 0x39, 0x39, 0x31, 0x3b, 0x20, 0x73, 0x65, 0x65, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x67,
+ 0x61, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x22,
+ 0x3b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30,
+ 0x31, 0x33, 0x2d, 0x30, 0x37, 0x2d, 0x31, 0x35, 0x20, 0x7b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54,
+ 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x61, 0x64, 0x64, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f,
+ 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x65, 0x77, 0x20,
+ 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x0a,
+ 0x2d, 0x20, 0x69, 0x70, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x2d, 0x6e, 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x0a, 0x2d, 0x20, 0x69,
+ 0x70, 0x76, 0x34, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2d,
+ 0x6e, 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x0a, 0x2d, 0x20, 0x69, 0x70,
+ 0x76, 0x36, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2d, 0x6e,
+ 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46, 0x43, 0x20, 0x36,
+ 0x39, 0x39, 0x31, 0x3a, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20,
+ 0x59, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x54, 0x79,
+ 0x70, 0x65, 0x73, 0x22, 0x3b, 0x7d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x39, 0x2d, 0x32,
+ 0x34, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x22, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x3b, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46,
+ 0x43, 0x20, 0x36, 0x30, 0x32, 0x31, 0x3a, 0x20, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x6f, 0x6e, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x61, 0x74, 0x61,
+ 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70,
+ 0x65, 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x2d, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x6e,
+ 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x65,
+ 0x6e, 0x75, 0x6d, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20,
+ 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x22, 0x30, 0x22, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x41, 0x6e, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x6f,
+ 0x72, 0x20, 0x75, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65,
+ 0x64, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x22,
+ 0x3b, 0x7d, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x69, 0x70, 0x76, 0x34, 0x20,
+ 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x22, 0x31, 0x22, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x46, 0x43, 0x20,
+ 0x37, 0x39, 0x31, 0x2e, 0x22, 0x3b, 0x7d, 0x65, 0x6e, 0x75, 0x6d, 0x20,
+ 0x69, 0x70, 0x76, 0x36, 0x20, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x22, 0x32, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x49, 0x50, 0x76,
+ 0x36, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x61,
+ 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x32, 0x34, 0x36, 0x30, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x0a, 0x0a, 0x49, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73,
+ 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73,
+ 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65,
+ 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x65, 0x74, 0x56, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c,
+ 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32,
+ 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x20, 0x37, 0x39, 0x31, 0x3a, 0x20,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x50, 0x72, 0x6f,
+ 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x32, 0x34,
+ 0x36, 0x30, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+ 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c, 0x20, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x28, 0x49, 0x50,
+ 0x76, 0x36, 0x29, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x34, 0x30,
+ 0x30, 0x31, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20,
+ 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+ 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x41, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70,
+ 0x65, 0x64, 0x65, 0x66, 0x20, 0x64, 0x73, 0x63, 0x70, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x20, 0x7b, 0x72,
+ 0x61, 0x6e, 0x67, 0x65, 0x20, 0x22, 0x30, 0x2e, 0x2e, 0x36, 0x33, 0x22,
+ 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x64, 0x73, 0x63, 0x70, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x43, 0x6f, 0x64, 0x65, 0x20, 0x50,
+ 0x6f, 0x69, 0x6e, 0x74, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x6d, 0x61, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x61,
+ 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x74,
+ 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x2e, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63,
+ 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65,
+ 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x73,
+ 0x63, 0x70, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63,
+ 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22,
+ 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22,
+ 0x52, 0x46, 0x43, 0x20, 0x33, 0x32, 0x38, 0x39, 0x3a, 0x20, 0x4d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x42, 0x61, 0x73,
+ 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x69,
+ 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x74, 0x65, 0x64,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x20, 0x41, 0x72, 0x63,
+ 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x0a, 0x52, 0x46,
+ 0x43, 0x20, 0x32, 0x34, 0x37, 0x34, 0x3a, 0x20, 0x44, 0x65, 0x66, 0x69,
+ 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x44, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x69,
+ 0x61, 0x74, 0x65, 0x64, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x73, 0x20, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x44, 0x53, 0x20, 0x46,
+ 0x69, 0x65, 0x6c, 0x64, 0x29, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, 0x50,
+ 0x76, 0x36, 0x20, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x0a, 0x52,
+ 0x46, 0x43, 0x20, 0x32, 0x37, 0x38, 0x30, 0x3a, 0x20, 0x49, 0x41, 0x4e,
+ 0x41, 0x20, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x47, 0x75, 0x69, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x20,
+ 0x46, 0x6f, 0x72, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x49,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x48,
+ 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70,
+ 0x65, 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x76, 0x36, 0x2d, 0x66, 0x6c,
+ 0x6f, 0x77, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x20, 0x7b, 0x72,
+ 0x61, 0x6e, 0x67, 0x65, 0x20, 0x22, 0x30, 0x2e, 0x2e, 0x31, 0x30, 0x34,
+ 0x38, 0x35, 0x37, 0x35, 0x22, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20,
+ 0x69, 0x70, 0x76, 0x36, 0x2d, 0x66, 0x6c, 0x6f, 0x77, 0x2d, 0x6c, 0x61,
+ 0x62, 0x65, 0x6c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, 0x46, 0x6c, 0x6f, 0x77, 0x0a,
+ 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e, 0x20,
+ 0x49, 0x50, 0x76, 0x36, 0x20, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x20,
+ 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x0a, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e,
+ 0x61, 0x74, 0x65, 0x20, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x20,
+ 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d,
+ 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75,
+ 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x49, 0x50, 0x76, 0x36, 0x46, 0x6c, 0x6f, 0x77, 0x4c,
+ 0x61, 0x62, 0x65, 0x6c, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c,
+ 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32,
+ 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x33, 0x35, 0x39, 0x35, 0x3a, 0x20,
+ 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x6e, 0x76,
+ 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x49, 0x50, 0x76, 0x36, 0x20, 0x46, 0x6c, 0x6f, 0x77, 0x20, 0x4c, 0x61,
+ 0x62, 0x65, 0x6c, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x32, 0x34, 0x36, 0x30,
+ 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x50,
+ 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2c, 0x20, 0x56, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x28, 0x49, 0x50, 0x76, 0x36,
+ 0x29, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65,
+ 0x66, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74,
+ 0x31, 0x36, 0x20, 0x7b, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x22, 0x30,
+ 0x2e, 0x2e, 0x36, 0x35, 0x35, 0x33, 0x35, 0x22, 0x3b, 0x7d, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54,
+ 0x68, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x6e, 0x75, 0x6d, 0x62,
+ 0x65, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x31, 0x36, 0x2d,
+ 0x62, 0x69, 0x74, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x0a, 0x49, 0x6e,
+ 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73,
+ 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x70,
+ 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x73, 0x75, 0x63, 0x68,
+ 0x20, 0x61, 0x73, 0x20, 0x55, 0x44, 0x50, 0x2c, 0x20, 0x54, 0x43, 0x50,
+ 0x2c, 0x20, 0x44, 0x43, 0x43, 0x50, 0x2c, 0x20, 0x6f, 0x72, 0x0a, 0x53,
+ 0x43, 0x54, 0x50, 0x2e, 0x20, 0x20, 0x50, 0x6f, 0x72, 0x74, 0x20, 0x6e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x61,
+ 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x49,
+ 0x41, 0x4e, 0x41, 0x2e, 0x20, 0x20, 0x41, 0x20, 0x63, 0x75, 0x72, 0x72,
+ 0x65, 0x6e, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x0a,
+ 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x3c, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x61,
+ 0x6e, 0x61, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x3e, 0x2e, 0x0a, 0x0a, 0x4e,
+ 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20,
+ 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x49, 0x41, 0x4e, 0x41, 0x2e, 0x20, 0x20, 0x49, 0x6e,
+ 0x0a, 0x73, 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+ 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x64, 0x6f, 0x65,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x73,
+ 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e,
+ 0x0a, 0x62, 0x65, 0x20, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x73, 0x75, 0x62, 0x74, 0x79, 0x70, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x6e,
+ 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x0a,
+ 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73,
+ 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73,
+ 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x65, 0x74, 0x50,
+ 0x6f, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x20,
+ 0x37, 0x36, 0x38, 0x3a, 0x20, 0x55, 0x73, 0x65, 0x72, 0x20, 0x44, 0x61,
+ 0x74, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f,
+ 0x63, 0x6f, 0x6c, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x20, 0x37, 0x39, 0x33,
+ 0x3a, 0x20, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x50,
+ 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x0a, 0x52, 0x46, 0x43, 0x20,
+ 0x34, 0x39, 0x36, 0x30, 0x3a, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+ 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x54, 0x72, 0x61,
+ 0x6e, 0x73, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x72,
+ 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x34,
+ 0x33, 0x34, 0x30, 0x3a, 0x20, 0x44, 0x61, 0x74, 0x61, 0x67, 0x72, 0x61,
+ 0x6d, 0x20, 0x43, 0x6f, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x20, 0x50, 0x72, 0x6f,
+ 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x28, 0x44, 0x43, 0x43, 0x50, 0x29,
+ 0x0a, 0x52, 0x46, 0x43, 0x20, 0x34, 0x30, 0x30, 0x31, 0x3a, 0x20, 0x54,
+ 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65,
+ 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77,
+ 0x6f, 0x72, 0x6b, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65,
+ 0x73, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x61, 0x73, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x61, 0x73, 0x2d, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x6f,
+ 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20,
+ 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x0a, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20, 0x61,
+ 0x6e, 0x20, 0x41, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73,
+ 0x20, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x28, 0x41, 0x53, 0x29,
+ 0x2e, 0x20, 0x20, 0x41, 0x6e, 0x20, 0x41, 0x53, 0x20, 0x69, 0x73, 0x20,
+ 0x61, 0x20, 0x73, 0x65, 0x74, 0x0a, 0x6f, 0x66, 0x20, 0x72, 0x6f, 0x75,
+ 0x74, 0x65, 0x72, 0x73, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x61,
+ 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x74, 0x65, 0x63, 0x68,
+ 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69,
+ 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x75, 0x73,
+ 0x69, 0x6e, 0x67, 0x0a, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x69, 0x6f, 0x72, 0x20, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x20,
+ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x6d, 0x65, 0x74, 0x72,
+ 0x69, 0x63, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x65,
+ 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x53, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e,
+ 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x20, 0x67, 0x61,
+ 0x74, 0x65, 0x77, 0x61, 0x79, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63,
+ 0x6f, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x20,
+ 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x6f,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x41, 0x53, 0x65, 0x73, 0x2e, 0x20, 0x20,
+ 0x49, 0x41, 0x4e, 0x41, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x74, 0x61, 0x69,
+ 0x6e, 0x73, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x41, 0x53, 0x20, 0x6e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x68, 0x61, 0x73, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x67,
+ 0x61, 0x74, 0x65, 0x64, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x0a,
+ 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x72, 0x69, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x41, 0x75,
+ 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x73, 0x79, 0x73,
+ 0x74, 0x65, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x20,
+ 0x77, 0x65, 0x72, 0x65, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61,
+ 0x6c, 0x6c, 0x79, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x31, 0x36, 0x0a, 0x62, 0x69, 0x74, 0x73, 0x2e, 0x20,
+ 0x20, 0x42, 0x47, 0x50, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x65, 0x6e, 0x6c,
+ 0x61, 0x72, 0x67, 0x65, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x75,
+ 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x73, 0x79, 0x73,
+ 0x74, 0x65, 0x6d, 0x0a, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x33, 0x32, 0x20, 0x62,
+ 0x69, 0x74, 0x73, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x66, 0x6f, 0x72,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x69,
+ 0x6e, 0x74, 0x33, 0x32, 0x0a, 0x62, 0x61, 0x73, 0x65, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61,
+ 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72,
+ 0x69, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x72,
+ 0x64, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f,
+ 0x72, 0x74, 0x0a, 0x61, 0x20, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20,
+ 0x61, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x73,
+ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+ 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65,
+ 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65,
+ 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71,
+ 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x65, 0x74, 0x41, 0x75, 0x74, 0x6f,
+ 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d,
+ 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75,
+ 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49,
+ 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x31, 0x39, 0x33, 0x30,
+ 0x3a, 0x20, 0x47, 0x75, 0x69, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20,
+ 0x41, 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x53,
+ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x28, 0x41, 0x53, 0x29, 0x0a, 0x52,
+ 0x46, 0x43, 0x20, 0x34, 0x32, 0x37, 0x31, 0x3a, 0x20, 0x41, 0x20, 0x42,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
+ 0x79, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x34,
+ 0x20, 0x28, 0x42, 0x47, 0x50, 0x2d, 0x34, 0x29, 0x0a, 0x52, 0x46, 0x43,
+ 0x20, 0x34, 0x30, 0x30, 0x31, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75,
+ 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x65, 0x74, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20,
+ 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x0a, 0x52, 0x46,
+ 0x43, 0x20, 0x36, 0x37, 0x39, 0x33, 0x3a, 0x20, 0x42, 0x47, 0x50, 0x20,
+ 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x46, 0x6f, 0x75, 0x72, 0x2d, 0x4f, 0x63, 0x74, 0x65, 0x74, 0x20, 0x41,
+ 0x75, 0x74, 0x6f, 0x6e, 0x6f, 0x6d, 0x6f, 0x75, 0x73, 0x20, 0x53, 0x79,
+ 0x73, 0x74, 0x65, 0x6d, 0x20, 0x28, 0x41, 0x53, 0x29, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x20, 0x53, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3b, 0x7d,
+ 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x2d, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70, 0x76, 0x34, 0x2d, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70, 0x76, 0x36, 0x2d, 0x61, 0x64,
+ 0x64, 0x72, 0x65, 0x73, 0x73, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20,
+ 0x69, 0x70, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20,
+ 0x49, 0x50, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e,
+ 0x65, 0x75, 0x74, 0x72, 0x61, 0x6c, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x72,
+ 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x73, 0x63,
+ 0x6f, 0x70, 0x65, 0x64, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x65, 0x73, 0x0a, 0x62, 0x79, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69,
+ 0x6e, 0x67, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46, 0x43, 0x20, 0x34,
+ 0x30, 0x30, 0x37, 0x3a, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x53, 0x63,
+ 0x6f, 0x70, 0x65, 0x64, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72,
+ 0x65, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x70, 0x76, 0x34, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27,
+ 0x28, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x2d, 0x39,
+ 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x32, 0x5b, 0x30, 0x2d, 0x34,
+ 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x32, 0x35, 0x5b, 0x30, 0x2d,
+ 0x35, 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x7b, 0x33, 0x7d, 0x28, 0x5b, 0x30,
+ 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x7c, 0x32, 0x5b, 0x30, 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x7c, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x29, 0x28,
+ 0x25, 0x5b, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5c, 0x70, 0x7b, 0x4c, 0x7d,
+ 0x5d, 0x2b, 0x29, 0x3f, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20,
+ 0x69, 0x70, 0x76, 0x34, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x76, 0x34,
+ 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x69, 0x6e, 0x0a,
+ 0x64, 0x6f, 0x74, 0x74, 0x65, 0x64, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x20,
+ 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x54,
+ 0x68, 0x65, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20, 0x61, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c,
+ 0x75, 0x64, 0x65, 0x20, 0x61, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x0a, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x2c, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x25, 0x20, 0x73,
+ 0x69, 0x67, 0x6e, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x7a, 0x6f,
+ 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69, 0x73, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x61,
+ 0x6d, 0x62, 0x69, 0x67, 0x75, 0x61, 0x74, 0x65, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x20, 0x20,
+ 0x46, 0x6f, 0x72, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x6c, 0x6f, 0x63,
+ 0x61, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73,
+ 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69,
+ 0x6e, 0x64, 0x65, 0x78, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x0a, 0x74, 0x79,
+ 0x70, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65,
+ 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65,
+ 0x72, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x0a, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x66, 0x61, 0x63, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
+ 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65,
+ 0x64, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f,
+ 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6f, 0x6e,
+ 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6c,
+ 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x3b, 0x7d, 0x74, 0x79,
+ 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x76, 0x36, 0x2d, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61, 0x74,
+ 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x28, 0x3a, 0x7c, 0x5b, 0x30,
+ 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c,
+ 0x34, 0x7d, 0x29, 0x3a, 0x29, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d,
+ 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c, 0x34, 0x7d, 0x3a, 0x29,
+ 0x7b, 0x30, 0x2c, 0x35, 0x7d, 0x28, 0x28, 0x28, 0x5b, 0x30, 0x2d, 0x39,
+ 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c, 0x34, 0x7d,
+ 0x3a, 0x29, 0x3f, 0x28, 0x3a, 0x7c, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d,
+ 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c, 0x34, 0x7d, 0x29, 0x29,
+ 0x7c, 0x28, 0x28, 0x28, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x7c,
+ 0x32, 0x5b, 0x30, 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c,
+ 0x5b, 0x30, 0x31, 0x5d, 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x3f, 0x5b,
+ 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x7b, 0x33, 0x7d, 0x28,
+ 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x7c, 0x32, 0x5b, 0x30, 0x2d,
+ 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x30, 0x31, 0x5d,
+ 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x5d,
+ 0x29, 0x29, 0x29, 0x28, 0x25, 0x5b, 0x5c, 0x70, 0x7b, 0x4e, 0x7d, 0x5c,
+ 0x70, 0x7b, 0x4c, 0x7d, 0x5d, 0x2b, 0x29, 0x3f, 0x27, 0x3b, 0x70, 0x61,
+ 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x28, 0x5b, 0x5e, 0x3a,
+ 0x5d, 0x2b, 0x3a, 0x29, 0x7b, 0x36, 0x7d, 0x28, 0x28, 0x5b, 0x5e, 0x3a,
+ 0x5d, 0x2b, 0x3a, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x29, 0x7c, 0x28, 0x2e,
+ 0x2a, 0x5c, 0x2e, 0x2e, 0x2a, 0x29, 0x29, 0x29, 0x7c, 0x28, 0x28, 0x28,
+ 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x3a, 0x29, 0x2a, 0x5b, 0x5e, 0x3a, 0x5d,
+ 0x2b, 0x29, 0x3f, 0x3a, 0x3a, 0x28, 0x28, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b,
+ 0x3a, 0x29, 0x2a, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x29, 0x3f, 0x29, 0x28,
+ 0x25, 0x2e, 0x2b, 0x29, 0x3f, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65,
+ 0x20, 0x69, 0x70, 0x76, 0x36, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x76,
+ 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x2c, 0x0a, 0x6d, 0x69, 0x78, 0x65, 0x64,
+ 0x2c, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x6e, 0x65, 0x64, 0x2c,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x65, 0x6e,
+ 0x65, 0x64, 0x2d, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x20, 0x6e, 0x6f, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x49, 0x50, 0x76, 0x36, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x20, 0x61, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x2c, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x25, 0x20, 0x73, 0x69, 0x67, 0x6e,
+ 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69, 0x73, 0x61, 0x6d, 0x62, 0x69,
+ 0x67, 0x75, 0x61, 0x74, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x63, 0x61, 0x6c, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x0a,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x20, 0x20, 0x46, 0x6f, 0x72,
+ 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20,
+ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x0a, 0x74, 0x79, 0x70, 0x69, 0x63,
+ 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x20, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x6e, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
+ 0x63, 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75,
+ 0x6c, 0x74, 0x0a, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x77, 0x69,
+ 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2e, 0x0a,
+ 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63,
+ 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+ 0x73, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x0a, 0x72, 0x65, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x53,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x20, 0x6f, 0x66, 0x20,
+ 0x52, 0x46, 0x43, 0x20, 0x35, 0x39, 0x35, 0x32, 0x2e, 0x20, 0x20, 0x54,
+ 0x68, 0x65, 0x0a, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c,
+ 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x64,
+ 0x65, 0x78, 0x20, 0x69, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x0a, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x62, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x31, 0x31, 0x2e, 0x32, 0x20, 0x6f, 0x66, 0x20, 0x52,
+ 0x46, 0x43, 0x20, 0x34, 0x30, 0x30, 0x37, 0x2e, 0x22, 0x3b, 0x72, 0x65,
+ 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43,
+ 0x20, 0x34, 0x32, 0x39, 0x31, 0x3a, 0x20, 0x49, 0x50, 0x20, 0x56, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x20, 0x41, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69,
+ 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x0a, 0x52, 0x46, 0x43, 0x20,
+ 0x34, 0x30, 0x30, 0x37, 0x3a, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x53,
+ 0x63, 0x6f, 0x70, 0x65, 0x64, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
+ 0x73, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75,
+ 0x72, 0x65, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x35, 0x39, 0x35, 0x32, 0x3a,
+ 0x20, 0x41, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x50,
+ 0x76, 0x36, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x54,
+ 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x2d, 0x6e, 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x7b,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x7b,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70,
+ 0x76, 0x34, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2d, 0x6e,
+ 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70, 0x76, 0x36, 0x2d, 0x61, 0x64,
+ 0x64, 0x72, 0x65, 0x73, 0x73, 0x2d, 0x6e, 0x6f, 0x2d, 0x7a, 0x6f, 0x6e,
+ 0x65, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x69, 0x70, 0x2d, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2d, 0x6e, 0x6f, 0x2d, 0x7a, 0x6f,
+ 0x6e, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50,
+ 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x69, 0x73, 0x0a, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6e, 0x65, 0x75, 0x74, 0x72, 0x61, 0x6c, 0x2e, 0x20,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75,
+ 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x73, 0x63,
+ 0x6f, 0x70, 0x65, 0x64, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x65, 0x73, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x69, 0x74, 0x20,
+ 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c,
+ 0x6f, 0x77, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x0a, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46, 0x43, 0x20, 0x34,
+ 0x30, 0x30, 0x37, 0x3a, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x53, 0x63,
+ 0x6f, 0x70, 0x65, 0x64, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72,
+ 0x65, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x70, 0x76, 0x34, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x2d, 0x6e, 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70, 0x76, 0x34,
+ 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7b, 0x70, 0x61,
+ 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x5c,
+ 0x2e, 0x5d, 0x2a, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x6e, 0x20, 0x49, 0x50,
+ 0x76, 0x34, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x7a, 0x6f, 0x6e,
+ 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x20, 0x20, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x72,
+ 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x69, 0x70,
+ 0x76, 0x34, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20,
+ 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x73, 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x0a, 0x6b, 0x6e, 0x6f, 0x77,
+ 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x7a, 0x6f, 0x6e, 0x65,
+ 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65,
+ 0x65, 0x64, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65,
+ 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x76, 0x36, 0x2d, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x2d, 0x6e, 0x6f, 0x2d, 0x7a, 0x6f, 0x6e, 0x65,
+ 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a,
+ 0x69, 0x70, 0x76, 0x36, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5b,
+ 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x3a, 0x5c, 0x2e,
+ 0x5d, 0x2a, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x6e, 0x20, 0x49, 0x50, 0x76,
+ 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x20, 0x7a, 0x6f, 0x6e, 0x65,
+ 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x64, 0x65, 0x72, 0x69,
+ 0x76, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x69, 0x70, 0x76,
+ 0x36, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2c, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69,
+ 0x6e, 0x20, 0x73, 0x69, 0x74, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x7a,
+ 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x0a, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x65, 0x65,
+ 0x64, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x34, 0x32, 0x39,
+ 0x31, 0x3a, 0x20, 0x49, 0x50, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x36, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74,
+ 0x75, 0x72, 0x65, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x34, 0x30, 0x30, 0x37,
+ 0x3a, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x53, 0x63, 0x6f, 0x70, 0x65,
+ 0x64, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x41, 0x72,
+ 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x0a, 0x52,
+ 0x46, 0x43, 0x20, 0x35, 0x39, 0x35, 0x32, 0x3a, 0x20, 0x41, 0x20, 0x52,
+ 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x41,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x54, 0x65, 0x78, 0x74, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x52,
+ 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x70, 0x2d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70, 0x76,
+ 0x34, 0x2d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x3b, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x69, 0x70, 0x76, 0x36, 0x2d,
+ 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65,
+ 0x20, 0x69, 0x70, 0x2d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x20, 0x70, 0x72, 0x65,
+ 0x66, 0x69, 0x78, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x73, 0x20, 0x49,
+ 0x50, 0x0a, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x65,
+ 0x75, 0x74, 0x72, 0x61, 0x6c, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x49, 0x50, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x69, 0x70, 0x76, 0x34, 0x2d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20,
+ 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28,
+ 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x2d, 0x39, 0x5d,
+ 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x39, 0x5d,
+ 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x32, 0x5b, 0x30, 0x2d, 0x34, 0x5d,
+ 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35,
+ 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x7b, 0x33, 0x7d, 0x28, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x7c, 0x32, 0x5b, 0x30, 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x7c, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x29, 0x2f, 0x28,
+ 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7c, 0x28, 0x5b, 0x31, 0x2d,
+ 0x32, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x7c, 0x28, 0x33, 0x5b,
+ 0x30, 0x2d, 0x32, 0x5d, 0x29, 0x29, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68,
+ 0x65, 0x20, 0x69, 0x70, 0x76, 0x34, 0x2d, 0x70, 0x72, 0x65, 0x66, 0x69,
+ 0x78, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x76,
+ 0x34, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x70, 0x72,
+ 0x65, 0x66, 0x69, 0x78, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x70, 0x72,
+ 0x65, 0x66, 0x69, 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20,
+ 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, 0x20, 0x62, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
+ 0x0a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x74, 0x68,
+ 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20,
+ 0x74, 0x6f, 0x20, 0x33, 0x32, 0x2e, 0x0a, 0x0a, 0x41, 0x20, 0x70, 0x72,
+ 0x65, 0x66, 0x69, 0x78, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x20, 0x63,
+ 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74,
+ 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72,
+ 0x65, 0x73, 0x73, 0x0a, 0x6d, 0x61, 0x73, 0x6b, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x20, 0x31, 0x2d, 0x62, 0x69, 0x74,
+ 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d,
+ 0x6f, 0x73, 0x74, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63,
+ 0x61, 0x6e, 0x74, 0x20, 0x62, 0x69, 0x74, 0x20, 0x28, 0x4d, 0x53, 0x42,
+ 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x74,
+ 0x68, 0x65, 0x72, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x74,
+ 0x20, 0x74, 0x6f, 0x20, 0x30, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20,
+ 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x49,
+ 0x50, 0x76, 0x34, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x68,
+ 0x61, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20,
+ 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x49, 0x50, 0x76, 0x34, 0x20,
+ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x65, 0x74, 0x20,
+ 0x74, 0x6f, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x61, 0x72,
+ 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x49, 0x50, 0x76,
+ 0x34, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2e, 0x22, 0x3b, 0x7d,
+ 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x69, 0x70, 0x76, 0x36,
+ 0x2d, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x7b, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61,
+ 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x28, 0x3a, 0x7c, 0x5b,
+ 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30,
+ 0x2c, 0x34, 0x7d, 0x29, 0x3a, 0x29, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x61,
+ 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c, 0x34, 0x7d, 0x3a,
+ 0x29, 0x7b, 0x30, 0x2c, 0x35, 0x7d, 0x28, 0x28, 0x28, 0x5b, 0x30, 0x2d,
+ 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c, 0x34,
+ 0x7d, 0x3a, 0x29, 0x3f, 0x28, 0x3a, 0x7c, 0x5b, 0x30, 0x2d, 0x39, 0x61,
+ 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x30, 0x2c, 0x34, 0x7d, 0x29,
+ 0x29, 0x7c, 0x28, 0x28, 0x28, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d,
+ 0x7c, 0x32, 0x5b, 0x30, 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d,
+ 0x7c, 0x5b, 0x30, 0x31, 0x5d, 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x3f,
+ 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x5c, 0x2e, 0x29, 0x7b, 0x33, 0x7d,
+ 0x28, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x7c, 0x32, 0x5b, 0x30,
+ 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b, 0x30, 0x31,
+ 0x5d, 0x3f, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x3f, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x29, 0x29, 0x29, 0x28, 0x2f, 0x28, 0x28, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x29, 0x7c, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x7d,
+ 0x29, 0x7c, 0x28, 0x31, 0x5b, 0x30, 0x2d, 0x31, 0x5d, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x29, 0x7c, 0x28, 0x31, 0x32, 0x5b, 0x30, 0x2d, 0x38, 0x5d,
+ 0x29, 0x29, 0x29, 0x27, 0x3b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
+ 0x20, 0x27, 0x28, 0x28, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x3a, 0x29, 0x7b,
+ 0x36, 0x7d, 0x28, 0x28, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x3a, 0x5b, 0x5e,
+ 0x3a, 0x5d, 0x2b, 0x29, 0x7c, 0x28, 0x2e, 0x2a, 0x5c, 0x2e, 0x2e, 0x2a,
+ 0x29, 0x29, 0x29, 0x7c, 0x28, 0x28, 0x28, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b,
+ 0x3a, 0x29, 0x2a, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x29, 0x3f, 0x3a, 0x3a,
+ 0x28, 0x28, 0x5b, 0x5e, 0x3a, 0x5d, 0x2b, 0x3a, 0x29, 0x2a, 0x5b, 0x5e,
+ 0x3a, 0x5d, 0x2b, 0x29, 0x3f, 0x29, 0x28, 0x2f, 0x2e, 0x2b, 0x29, 0x27,
+ 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x69, 0x70, 0x76, 0x36, 0x2d,
+ 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61,
+ 0x6e, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x2e, 0x0a, 0x54,
+ 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x6c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x20, 0x69, 0x73, 0x20, 0x67, 0x69, 0x76, 0x65,
+ 0x6e, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75, 0x6d,
+ 0x62, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x65,
+ 0x73, 0x73, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65,
+ 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x31, 0x32, 0x38, 0x2e,
+ 0x0a, 0x0a, 0x41, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x6c,
+ 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x6e, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x49,
+ 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x0a, 0x6d, 0x61,
+ 0x73, 0x6b, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20,
+ 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73,
+ 0x20, 0x31, 0x2d, 0x62, 0x69, 0x74, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x0a, 0x73, 0x69,
+ 0x67, 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, 0x20, 0x62, 0x69,
+ 0x74, 0x20, 0x28, 0x4d, 0x53, 0x42, 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x62, 0x69,
+ 0x74, 0x73, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x30, 0x2e,
+ 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c,
+ 0x64, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x62,
+ 0x69, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x6e, 0x67, 0x0a, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78,
+ 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x7a, 0x65, 0x72, 0x6f,
+ 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e,
+ 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x70,
+ 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, 0x6c,
+ 0x6c, 0x20, 0x62, 0x69, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68,
+ 0x65, 0x20, 0x49, 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x7a, 0x65,
+ 0x72, 0x6f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20,
+ 0x6e, 0x6f, 0x74, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x0a, 0x49, 0x50, 0x76, 0x36, 0x20, 0x70, 0x72, 0x65,
+ 0x66, 0x69, 0x78, 0x2e, 0x20, 0x20, 0x46, 0x75, 0x72, 0x74, 0x68, 0x65,
+ 0x72, 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49,
+ 0x50, 0x76, 0x36, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
+ 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x65, 0x64, 0x0a, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x34, 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x35, 0x39,
+ 0x35, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x35, 0x39, 0x35, 0x32,
+ 0x3a, 0x20, 0x41, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e,
+ 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49,
+ 0x50, 0x76, 0x36, 0x20, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20,
+ 0x54, 0x65, 0x78, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70,
+ 0x65, 0x64, 0x65, 0x66, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2d,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x6c, 0x65, 0x6e, 0x67, 0x74,
+ 0x68, 0x20, 0x22, 0x31, 0x2e, 0x2e, 0x32, 0x35, 0x33, 0x22, 0x3b, 0x70,
+ 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x28, 0x28, 0x5b,
+ 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x5d, 0x28,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x2d,
+ 0x5f, 0x5d, 0x29, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x29, 0x3f, 0x5b,
+ 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x5c, 0x2e,
+ 0x29, 0x2a, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d,
+ 0x39, 0x5f, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
+ 0x2d, 0x39, 0x5c, 0x2d, 0x5f, 0x5d, 0x29, 0x7b, 0x30, 0x2c, 0x36, 0x31,
+ 0x7d, 0x29, 0x3f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d,
+ 0x39, 0x5d, 0x5c, 0x2e, 0x3f, 0x29, 0x7c, 0x5c, 0x2e, 0x27, 0x3b, 0x7d,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x54, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2d,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x44,
+ 0x4e, 0x53, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x0a, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20, 0x62, 0x65, 0x20,
+ 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x65, 0x76, 0x65, 0x72,
+ 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x0a,
+ 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x20, 0x64, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72,
+ 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x6c, 0x6f, 0x6f, 0x73, 0x65,
+ 0x6c, 0x79, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x2e, 0x20, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x33,
+ 0x2e, 0x35, 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x31, 0x30,
+ 0x33, 0x34, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64,
+ 0x73, 0x20, 0x61, 0x20, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x20, 0x28,
+ 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20,
+ 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x32, 0x2e, 0x31, 0x20,
+ 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x31, 0x31, 0x32, 0x33, 0x29,
+ 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65,
+ 0x72, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x0a, 0x66, 0x6f, 0x72, 0x20, 0x63, 0x75,
+ 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x70, 0x72, 0x61, 0x63, 0x74, 0x69,
+ 0x63, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x75, 0x73, 0x65, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x20, 0x70, 0x6f, 0x73, 0x73,
+ 0x69, 0x62, 0x6c, 0x65, 0x0a, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20,
+ 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x20, 0x20,
+ 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x67, 0x6e,
+ 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x6f, 0x6c, 0x64, 0x20, 0x76,
+ 0x61, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73,
+ 0x20, 0x6f, 0x66, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x41, 0x20, 0x6f, 0x72, 0x20,
+ 0x41, 0x41, 0x41, 0x41, 0x20, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73,
+ 0x0a, 0x28, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x29, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+ 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x20, 0x73, 0x75, 0x63,
+ 0x68, 0x20, 0x61, 0x73, 0x20, 0x53, 0x52, 0x56, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x20, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x0a,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+ 0x74, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x63, 0x74, 0x65, 0x72, 0x20, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x20,
+ 0x28, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x0a, 0x69,
+ 0x6e, 0x20, 0x52, 0x46, 0x43, 0x20, 0x39, 0x35, 0x32, 0x29, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x4e, 0x53, 0x20,
+ 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x46, 0x43, 0x73, 0x20,
+ 0x31, 0x30, 0x33, 0x34, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x31, 0x31, 0x32,
+ 0x33, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x69, 0x6e, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20,
+ 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2d, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x0a, 0x61, 0x64, 0x68, 0x65, 0x72, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x74, 0x72, 0x69, 0x63,
+ 0x74, 0x65, 0x72, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6e, 0x73, 0x75, 0x72, 0x65, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c,
+ 0x69, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x65, 0x6e,
+ 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x44, 0x4e,
+ 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x44, 0x4e, 0x53, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x63, 0x6f, 0x6c, 0x20, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x65, 0x64, 0x0a, 0x74, 0x6f, 0x20, 0x32, 0x35, 0x35, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x53,
+ 0x69, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x6e, 0x63,
+ 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73,
+ 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73,
+ 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x61, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x62, 0x79,
+ 0x74, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x72,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x72, 0x61, 0x69, 0x6c,
+ 0x69, 0x6e, 0x67, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0a, 0x62, 0x79, 0x74,
+ 0x65, 0x2c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x32, 0x35, 0x33, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x63,
+ 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61, 0x72, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c,
+ 0x20, 0x64, 0x6f, 0x74, 0x74, 0x65, 0x64, 0x0a, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63,
+ 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x20, 0x75, 0x73,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x62, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x68, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6f,
+ 0x6c, 0x76, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0a, 0x49, 0x50, 0x20, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2e, 0x20, 0x20, 0x4e,
+ 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2d,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x6d,
+ 0x61, 0x79, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x20, 0x74,
+ 0x6f, 0x20, 0x71, 0x75, 0x65, 0x72, 0x79, 0x20, 0x6d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x6c, 0x65, 0x20, 0x44, 0x4e, 0x53, 0x20, 0x72, 0x65, 0x63,
+ 0x6f, 0x72, 0x64, 0x73, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20,
+ 0x41, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x50, 0x76, 0x34, 0x0a, 0x61,
+ 0x6e, 0x64, 0x20, 0x41, 0x41, 0x41, 0x41, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x49, 0x50, 0x76, 0x36, 0x29, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x6f, 0x72, 0x64, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a,
+ 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x44, 0x4e, 0x53, 0x20, 0x72, 0x65,
+ 0x63, 0x6f, 0x72, 0x64, 0x20, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x70,
+ 0x72, 0x65, 0x63, 0x65, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x63, 0x61,
+ 0x6e, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x62, 0x65, 0x20,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x65, 0x78, 0x70, 0x6c,
+ 0x69, 0x63, 0x69, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x20, 0x6f, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x2e, 0x0a, 0x0a,
+ 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x55, 0x53, 0x2d, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x20, 0x20, 0x54,
+ 0x68, 0x65, 0x69, 0x72, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63,
+ 0x61, 0x6c, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x75, 0x73,
+ 0x65, 0x73, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65,
+ 0x20, 0x55, 0x53, 0x2d, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x49,
+ 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x64, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x62,
+ 0x65, 0x20, 0x41, 0x2d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x20, 0x61,
+ 0x73, 0x20, 0x70, 0x65, 0x72, 0x20, 0x52, 0x46, 0x43, 0x20, 0x35, 0x38,
+ 0x39, 0x30, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x20, 0x39, 0x35, 0x32,
+ 0x3a, 0x20, 0x44, 0x6f, 0x44, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
+ 0x65, 0x74, 0x20, 0x48, 0x6f, 0x73, 0x74, 0x20, 0x54, 0x61, 0x62, 0x6c,
+ 0x65, 0x20, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x31, 0x30, 0x33, 0x34,
+ 0x3a, 0x20, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x20, 0x2d, 0x20, 0x43, 0x6f, 0x6e, 0x63, 0x65, 0x70, 0x74,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x46, 0x61, 0x63, 0x69, 0x6c, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x31, 0x31, 0x32,
+ 0x33, 0x3a, 0x20, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x65, 0x74, 0x20, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x20, 0x2d,
+ 0x2d, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+ 0x0a, 0x52, 0x46, 0x43, 0x20, 0x32, 0x37, 0x38, 0x32, 0x3a, 0x20, 0x41,
+ 0x20, 0x44, 0x4e, 0x53, 0x20, 0x52, 0x52, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28,
+ 0x44, 0x4e, 0x53, 0x20, 0x53, 0x52, 0x56, 0x29, 0x0a, 0x52, 0x46, 0x43,
+ 0x20, 0x35, 0x38, 0x39, 0x30, 0x3a, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64,
+ 0x20, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x4e, 0x61, 0x6d, 0x65,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x49, 0x44, 0x4e, 0x41, 0x29, 0x3a,
+ 0x20, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x77, 0x6f, 0x72, 0x6b, 0x22,
+ 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x68, 0x6f,
+ 0x73, 0x74, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x6e, 0x69,
+ 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65,
+ 0x74, 0x3a, 0x69, 0x70, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x3b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x64,
+ 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x3b, 0x7d,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x54, 0x68, 0x65, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x20,
+ 0x49, 0x50, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6f,
+ 0x72, 0x20, 0x61, 0x20, 0x44, 0x4e, 0x53, 0x0a, 0x64, 0x6f, 0x6d, 0x61,
+ 0x69, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x74,
+ 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x75, 0x72, 0x69, 0x20, 0x7b,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x54, 0x68, 0x65, 0x20, 0x75, 0x72, 0x69, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x61, 0x20, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x52,
+ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x49, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x0a, 0x28, 0x55, 0x52, 0x49, 0x29,
+ 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x62, 0x79, 0x20, 0x53, 0x54, 0x44, 0x20, 0x36, 0x36, 0x2e, 0x0a, 0x0a,
+ 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x75, 0x73, 0x69, 0x6e,
+ 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x72, 0x69, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x62, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x55, 0x53, 0x2d, 0x41, 0x53, 0x43, 0x49, 0x49, 0x20, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x2c, 0x0a, 0x61, 0x6e, 0x64,
+ 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x52, 0x46, 0x43, 0x20, 0x33, 0x39, 0x38, 0x36, 0x20, 0x53, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x36, 0x2e, 0x32, 0x2e, 0x31, 0x2c,
+ 0x20, 0x36, 0x2e, 0x32, 0x2e, 0x32, 0x2e, 0x31, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x36, 0x2e, 0x32, 0x2e, 0x32, 0x2e, 0x32, 0x2e, 0x20, 0x20,
+ 0x41, 0x6c, 0x6c, 0x20, 0x75, 0x6e, 0x6e, 0x65, 0x63, 0x65, 0x73, 0x73,
+ 0x61, 0x72, 0x79, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x2d,
+ 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20,
+ 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2d, 0x69, 0x6e,
+ 0x73, 0x65, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x0a, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x72, 0x65,
+ 0x20, 0x73, 0x65, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65,
+ 0x72, 0x63, 0x61, 0x73, 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x68, 0x65, 0x78, 0x61, 0x64, 0x65, 0x63,
+ 0x69, 0x6d, 0x61, 0x6c, 0x0a, 0x64, 0x69, 0x67, 0x69, 0x74, 0x73, 0x2c,
+ 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x75, 0x70, 0x70, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x20, 0x61,
+ 0x73, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x0a, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36,
+ 0x2e, 0x32, 0x2e, 0x32, 0x2e, 0x31, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65,
+ 0x20, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f,
+ 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
+ 0x65, 0x0a, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x20, 0x55, 0x52, 0x49,
+ 0x73, 0x2e, 0x20, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
+ 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20,
+ 0x6e, 0x6f, 0x74, 0x0a, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65,
+ 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
+ 0x65, 0x20, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x6e, 0x65, 0x73, 0x73,
+ 0x2e, 0x20, 0x20, 0x54, 0x77, 0x6f, 0x20, 0x55, 0x52, 0x49, 0x73, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x0a, 0x74, 0x65, 0x78,
+ 0x74, 0x75, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x64, 0x69, 0x73, 0x74, 0x69,
+ 0x6e, 0x63, 0x74, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x73, 0x74, 0x69,
+ 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x0a, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61,
+ 0x6c, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x4f, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x73, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x75, 0x72, 0x69, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6d, 0x61,
+ 0x79, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x0a, 0x74, 0x68, 0x65, 0x79, 0x20, 0x70, 0x65, 0x72,
+ 0x6d, 0x69, 0x74, 0x2e, 0x20, 0x20, 0x46, 0x6f, 0x72, 0x20, 0x65, 0x78,
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x27, 0x64, 0x61, 0x74, 0x61,
+ 0x3a, 0x27, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x27, 0x75, 0x72, 0x6e, 0x3a,
+ 0x27, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x0a, 0x6d, 0x69,
+ 0x67, 0x68, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x2e, 0x0a,
+ 0x0a, 0x41, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x6c, 0x65, 0x6e, 0x67,
+ 0x74, 0x68, 0x20, 0x55, 0x52, 0x49, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52,
+ 0x49, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e,
+ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x0a,
+ 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x20, 0x27, 0x55, 0x52, 0x49,
+ 0x20, 0x61, 0x62, 0x73, 0x65, 0x6e, 0x74, 0x27, 0x20, 0x77, 0x68, 0x65,
+ 0x72, 0x65, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e,
+ 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69,
+ 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73,
+ 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e,
+ 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x55, 0x72, 0x69,
+ 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75,
+ 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x35, 0x30, 0x31, 0x37, 0x2e, 0x22, 0x3b,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52,
+ 0x46, 0x43, 0x20, 0x33, 0x39, 0x38, 0x36, 0x3a, 0x20, 0x55, 0x6e, 0x69,
+ 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
+ 0x65, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x20, 0x28, 0x55, 0x52, 0x49, 0x29, 0x3a, 0x20, 0x47, 0x65, 0x6e, 0x65,
+ 0x72, 0x69, 0x63, 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x0a, 0x52,
+ 0x46, 0x43, 0x20, 0x33, 0x33, 0x30, 0x35, 0x3a, 0x20, 0x52, 0x65, 0x70,
+ 0x6f, 0x72, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x4a, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x57, 0x33, 0x43, 0x2f, 0x49,
+ 0x45, 0x54, 0x46, 0x20, 0x55, 0x52, 0x49, 0x20, 0x50, 0x6c, 0x61, 0x6e,
+ 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73,
+ 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x3a, 0x20, 0x55, 0x6e, 0x69, 0x66,
+ 0x6f, 0x72, 0x6d, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
+ 0x20, 0x28, 0x55, 0x52, 0x49, 0x73, 0x29, 0x2c, 0x20, 0x55, 0x52, 0x4c,
+ 0x73, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72,
+ 0x6d, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x20, 0x28, 0x55, 0x52, 0x4e, 0x73, 0x29, 0x3a,
+ 0x20, 0x43, 0x6c, 0x61, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x52, 0x65, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x52,
+ 0x46, 0x43, 0x20, 0x35, 0x30, 0x31, 0x37, 0x3a, 0x20, 0x4d, 0x49, 0x42,
+ 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x55, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x52, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x73, 0x20, 0x28, 0x55, 0x52, 0x49, 0x73, 0x29, 0x22,
+ 0x3b, 0x7d, 0x7d, 0x00
+};
diff --git a/models/ietf-inet-types@2013-07-15.yang b/models/ietf-inet-types@2013-07-15.yang
new file mode 100644
index 0000000..2f14270
--- /dev/null
+++ b/models/ietf-inet-types@2013-07-15.yang
@@ -0,0 +1,457 @@
+module ietf-inet-types {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
+ prefix "inet";
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ WG Chair: David Kessens
+ <mailto:david.kessens@nsn.com>
+
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Editor: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>";
+
+ description
+ "This module contains a collection of generally useful derived
+ YANG data types for Internet addresses and related things.
+
+ Copyright (c) 2013 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 6991; see
+ the RFC itself for full legal notices.";
+
+ revision 2013-07-15 {
+ description
+ "This revision adds the following new data types:
+ - ip-address-no-zone
+ - ipv4-address-no-zone
+ - ipv6-address-no-zone";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ revision 2010-09-24 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 6021: Common YANG Data Types";
+ }
+
+ /*** collection of types related to protocol fields ***/
+
+ typedef ip-version {
+ type enumeration {
+ enum unknown {
+ value "0";
+ description
+ "An unknown or unspecified version of the Internet
+ protocol.";
+ }
+ enum ipv4 {
+ value "1";
+ description
+ "The IPv4 protocol as defined in RFC 791.";
+ }
+ enum ipv6 {
+ value "2";
+ description
+ "The IPv6 protocol as defined in RFC 2460.";
+ }
+ }
+ description
+ "This value represents the version of the IP protocol.
+
+ In the value set and its semantics, this type is equivalent
+ to the InetVersion textual convention of the SMIv2.";
+ reference
+ "RFC 791: Internet Protocol
+ RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
+ RFC 4001: Textual Conventions for Internet Network Addresses";
+ }
+
+ typedef dscp {
+ type uint8 {
+ range "0..63";
+ }
+ description
+ "The dscp type represents a Differentiated Services Code Point
+ that may be used for marking packets in a traffic stream.
+ In the value set and its semantics, this type is equivalent
+ to the Dscp textual convention of the SMIv2.";
+ reference
+ "RFC 3289: Management Information Base for the Differentiated
+ Services Architecture
+ RFC 2474: Definition of the Differentiated Services Field
+ (DS Field) in the IPv4 and IPv6 Headers
+ RFC 2780: IANA Allocation Guidelines For Values In
+ the Internet Protocol and Related Headers";
+ }
+
+ typedef ipv6-flow-label {
+ type uint32 {
+ range "0..1048575";
+ }
+ description
+ "The ipv6-flow-label type represents the flow identifier or Flow
+ Label in an IPv6 packet header that may be used to
+ discriminate traffic flows.
+
+ In the value set and its semantics, this type is equivalent
+ to the IPv6FlowLabel textual convention of the SMIv2.";
+ reference
+ "RFC 3595: Textual Conventions for IPv6 Flow Label
+ RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
+ }
+
+ typedef port-number {
+ type uint16 {
+ range "0..65535";
+ }
+ description
+ "The port-number type represents a 16-bit port number of an
+ Internet transport-layer protocol such as UDP, TCP, DCCP, or
+ SCTP. Port numbers are assigned by IANA. A current list of
+ all assignments is available from <http://www.iana.org/>.
+
+ Note that the port number value zero is reserved by IANA. In
+ situations where the value zero does not make sense, it can
+ be excluded by subtyping the port-number type.
+ In the value set and its semantics, this type is equivalent
+ to the InetPortNumber textual convention of the SMIv2.";
+ reference
+ "RFC 768: User Datagram Protocol
+ RFC 793: Transmission Control Protocol
+ RFC 4960: Stream Control Transmission Protocol
+ RFC 4340: Datagram Congestion Control Protocol (DCCP)
+ RFC 4001: Textual Conventions for Internet Network Addresses";
+ }
+
+ /*** collection of types related to autonomous systems ***/
+
+ typedef as-number {
+ type uint32;
+ description
+ "The as-number type represents autonomous system numbers
+ which identify an Autonomous System (AS). An AS is a set
+ of routers under a single technical administration, using
+ an interior gateway protocol and common metrics to route
+ packets within the AS, and using an exterior gateway
+ protocol to route packets to other ASes. IANA maintains
+ the AS number space and has delegated large parts to the
+ regional registries.
+
+ Autonomous system numbers were originally limited to 16
+ bits. BGP extensions have enlarged the autonomous system
+ number space to 32 bits. This type therefore uses an uint32
+ base type without a range restriction in order to support
+ a larger autonomous system number space.
+
+ In the value set and its semantics, this type is equivalent
+ to the InetAutonomousSystemNumber textual convention of
+ the SMIv2.";
+ reference
+ "RFC 1930: Guidelines for creation, selection, and registration
+ of an Autonomous System (AS)
+ RFC 4271: A Border Gateway Protocol 4 (BGP-4)
+ RFC 4001: Textual Conventions for Internet Network Addresses
+ RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
+ Number Space";
+ }
+
+ /*** collection of types related to IP addresses and hostnames ***/
+
+ typedef ip-address {
+ type union {
+ type inet:ipv4-address;
+ type inet:ipv6-address;
+ }
+ description
+ "The ip-address type represents an IP address and is IP
+ version neutral. The format of the textual representation
+ implies the IP version. This type supports scoped addresses
+ by allowing zone identifiers in the address format.";
+ reference
+ "RFC 4007: IPv6 Scoped Address Architecture";
+ }
+
+ typedef ipv4-address {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ + '(%[\p{N}\p{L}]+)?';
+ }
+ description
+ "The ipv4-address type represents an IPv4 address in
+ dotted-quad notation. The IPv4 address may include a zone
+ index, separated by a % sign.
+
+ The zone index is used to disambiguate identical address
+ values. For link-local addresses, the zone index will
+ typically be the interface index number or the name of an
+ interface. If the zone index is not present, the default
+ zone of the device will be used.
+
+ The canonical format for the zone index is the numerical
+ format";
+ }
+
+ typedef ipv6-address {
+ type string {
+ pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ + '(%[\p{N}\p{L}]+)?';
+ pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ + '(%.+)?';
+ }
+ description
+ "The ipv6-address type represents an IPv6 address in full,
+ mixed, shortened, and shortened-mixed notation. The IPv6
+ address may include a zone index, separated by a % sign.
+
+ The zone index is used to disambiguate identical address
+ values. For link-local addresses, the zone index will
+ typically be the interface index number or the name of an
+ interface. If the zone index is not present, the default
+ zone of the device will be used.
+
+ The canonical format of IPv6 addresses uses the textual
+ representation defined in Section 4 of RFC 5952. The
+ canonical format for the zone index is the numerical
+ format as described in Section 11.2 of RFC 4007.";
+ reference
+ "RFC 4291: IP Version 6 Addressing Architecture
+ RFC 4007: IPv6 Scoped Address Architecture
+ RFC 5952: A Recommendation for IPv6 Address Text
+ Representation";
+ }
+
+ typedef ip-address-no-zone {
+ type union {
+ type inet:ipv4-address-no-zone;
+ type inet:ipv6-address-no-zone;
+ }
+ description
+ "The ip-address-no-zone type represents an IP address and is
+ IP version neutral. The format of the textual representation
+ implies the IP version. This type does not support scoped
+ addresses since it does not allow zone identifiers in the
+ address format.";
+ reference
+ "RFC 4007: IPv6 Scoped Address Architecture";
+ }
+
+ typedef ipv4-address-no-zone {
+ type inet:ipv4-address {
+ pattern '[0-9\.]*';
+ }
+ description
+ "An IPv4 address without a zone index. This type, derived from
+ ipv4-address, may be used in situations where the zone is
+ known from the context and hence no zone index is needed.";
+ }
+
+ typedef ipv6-address-no-zone {
+ type inet:ipv6-address {
+ pattern '[0-9a-fA-F:\.]*';
+ }
+ description
+ "An IPv6 address without a zone index. This type, derived from
+ ipv6-address, may be used in situations where the zone is
+ known from the context and hence no zone index is needed.";
+ reference
+ "RFC 4291: IP Version 6 Addressing Architecture
+ RFC 4007: IPv6 Scoped Address Architecture
+ RFC 5952: A Recommendation for IPv6 Address Text
+ Representation";
+ }
+
+ typedef ip-prefix {
+ type union {
+ type inet:ipv4-prefix;
+ type inet:ipv6-prefix;
+ }
+ description
+ "The ip-prefix type represents an IP prefix and is IP
+ version neutral. The format of the textual representations
+ implies the IP version.";
+ }
+
+ typedef ipv4-prefix {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
+ + '/(([0-9])|([1-2][0-9])|(3[0-2]))';
+ }
+ description
+ "The ipv4-prefix type represents an IPv4 address prefix.
+ The prefix length is given by the number following the
+ slash character and must be less than or equal to 32.
+
+ A prefix length value of n corresponds to an IP address
+ mask that has n contiguous 1-bits from the most
+ significant bit (MSB) and all other bits set to 0.
+
+ The canonical format of an IPv4 prefix has all bits of
+ the IPv4 address set to zero that are not part of the
+ IPv4 prefix.";
+ }
+
+ typedef ipv6-prefix {
+ type string {
+ pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
+ + '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
+ + '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
+ + '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
+ + '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
+ pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
+ + '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
+ + '(/.+)';
+ }
+ description
+ "The ipv6-prefix type represents an IPv6 address prefix.
+ The prefix length is given by the number following the
+ slash character and must be less than or equal to 128.
+
+ A prefix length value of n corresponds to an IP address
+ mask that has n contiguous 1-bits from the most
+ significant bit (MSB) and all other bits set to 0.
+
+ The IPv6 address should have all bits that do not belong
+ to the prefix set to zero.
+
+ The canonical format of an IPv6 prefix has all bits of
+ the IPv6 address set to zero that are not part of the
+ IPv6 prefix. Furthermore, the IPv6 address is represented
+ as defined in Section 4 of RFC 5952.";
+ reference
+ "RFC 5952: A Recommendation for IPv6 Address Text
+ Representation";
+ }
+
+ /*** collection of domain name and URI types ***/
+
+ typedef domain-name {
+ type string {
+ length "1..253";
+ pattern
+ '((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
+ + '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
+ + '|\.';
+ }
+ description
+ "The domain-name type represents a DNS domain name. The
+ name SHOULD be fully qualified whenever possible.
+
+ Internet domain names are only loosely specified. Section
+ 3.5 of RFC 1034 recommends a syntax (modified in Section
+ 2.1 of RFC 1123). The pattern above is intended to allow
+ for current practice in domain name use, and some possible
+ future expansion. It is designed to hold various types of
+ domain names, including names used for A or AAAA records
+ (host names) and other records, such as SRV records. Note
+ that Internet host names have a stricter syntax (described
+ in RFC 952) than the DNS recommendations in RFCs 1034 and
+ 1123, and that systems that want to store host names in
+ schema nodes using the domain-name type are recommended to
+ adhere to this stricter standard to ensure interoperability.
+
+ The encoding of DNS names in the DNS protocol is limited
+ to 255 characters. Since the encoding consists of labels
+ prefixed by a length bytes and there is a trailing NULL
+ byte, only 253 characters can appear in the textual dotted
+ notation.
+
+ The description clause of schema nodes using the domain-name
+ type MUST describe when and how these names are resolved to
+ IP addresses. Note that the resolution of a domain-name value
+ may require to query multiple DNS records (e.g., A for IPv4
+ and AAAA for IPv6). The order of the resolution process and
+ which DNS record takes precedence can either be defined
+ explicitly or may depend on the configuration of the
+ resolver.
+
+ Domain-name values use the US-ASCII encoding. Their canonical
+ format uses lowercase US-ASCII characters. Internationalized
+ domain names MUST be A-labels as per RFC 5890.";
+ reference
+ "RFC 952: DoD Internet Host Table Specification
+ RFC 1034: Domain Names - Concepts and Facilities
+ RFC 1123: Requirements for Internet Hosts -- Application
+ and Support
+ RFC 2782: A DNS RR for specifying the location of services
+ (DNS SRV)
+ RFC 5890: Internationalized Domain Names in Applications
+ (IDNA): Definitions and Document Framework";
+ }
+
+ typedef host {
+ type union {
+ type inet:ip-address;
+ type inet:domain-name;
+ }
+ description
+ "The host type represents either an IP address or a DNS
+ domain name.";
+ }
+
+ typedef uri {
+ type string;
+ description
+ "The uri type represents a Uniform Resource Identifier
+ (URI) as defined by STD 66.
+
+ Objects using the uri type MUST be in US-ASCII encoding,
+ and MUST be normalized as described by RFC 3986 Sections
+ 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
+ percent-encoding is removed, and all case-insensitive
+ characters are set to lowercase except for hexadecimal
+ digits, which are normalized to uppercase as described in
+ Section 6.2.2.1.
+
+ The purpose of this normalization is to help provide
+ unique URIs. Note that this normalization is not
+ sufficient to provide uniqueness. Two URIs that are
+ textually distinct after this normalization may still be
+ equivalent.
+
+ Objects using the uri type may restrict the schemes that
+ they permit. For example, 'data:' and 'urn:' schemes
+ might not be appropriate.
+
+ A zero-length URI is not a valid URI. This can be used to
+ express 'URI absent' where required.
+
+ In the value set and its semantics, this type is equivalent
+ to the Uri SMIv2 textual convention defined in RFC 5017.";
+ reference
+ "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
+ RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
+ Group: Uniform Resource Identifiers (URIs), URLs,
+ and Uniform Resource Names (URNs): Clarifications
+ and Recommendations
+ RFC 5017: MIB Textual Conventions for Uniform Resource
+ Identifiers (URIs)";
+ }
+
+}
diff --git a/models/ietf-yang-library@2018-01-17.h b/models/ietf-yang-library@2018-01-17.h
new file mode 100644
index 0000000..dacd5ad
--- /dev/null
+++ b/models/ietf-yang-library@2018-01-17.h
@@ -0,0 +1,1000 @@
+unsigned char ietf_yang_library_2018_01_17_yang[] = {
+ 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x65,
+ 0x74, 0x66, 0x2d, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72,
+ 0x61, 0x72, 0x79, 0x20, 0x7b, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x31, 0x3b, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x22, 0x75, 0x72, 0x6e,
+ 0x3a, 0x69, 0x65, 0x74, 0x66, 0x3a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
+ 0x3a, 0x78, 0x6d, 0x6c, 0x3a, 0x6e, 0x73, 0x3a, 0x79, 0x61, 0x6e, 0x67,
+ 0x3a, 0x69, 0x65, 0x74, 0x66, 0x2d, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x6c,
+ 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x22, 0x3b, 0x70, 0x72, 0x65, 0x66,
+ 0x69, 0x78, 0x20, 0x22, 0x79, 0x61, 0x6e, 0x67, 0x6c, 0x69, 0x62, 0x22,
+ 0x3b, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x65, 0x74, 0x66,
+ 0x2d, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20,
+ 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x79, 0x61, 0x6e, 0x67,
+ 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22,
+ 0x52, 0x46, 0x43, 0x20, 0x36, 0x39, 0x39, 0x31, 0x3a, 0x20, 0x43, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x61,
+ 0x74, 0x61, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x7d,
+ 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d,
+ 0x69, 0x6e, 0x65, 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x7b,
+ 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3b,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52,
+ 0x46, 0x43, 0x20, 0x36, 0x39, 0x39, 0x31, 0x3a, 0x20, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x6f, 0x6e, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x61, 0x74,
+ 0x61, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x7d, 0x69,
+ 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d, 0x64,
+ 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x7b, 0x70,
+ 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x64, 0x73, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x49, 0x2d, 0x44, 0x2e,
+ 0x69, 0x65, 0x74, 0x66, 0x2d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x65, 0x64,
+ 0x2d, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x3a,
+ 0x0a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4d, 0x61, 0x6e,
+ 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x44, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74,
+ 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x6f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x49, 0x45, 0x54, 0x46, 0x20, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46,
+ 0x20, 0x28, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x43, 0x6f,
+ 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29,
+ 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f,
+ 0x75, 0x70, 0x22, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x0a,
+ 0x22, 0x57, 0x47, 0x20, 0x57, 0x65, 0x62, 0x3a, 0x20, 0x20, 0x20, 0x3c,
+ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73,
+ 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x67,
+ 0x2f, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66, 0x2f, 0x3e, 0x0a, 0x57,
+ 0x47, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x3a, 0x20, 0x20, 0x3c, 0x6d, 0x61,
+ 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6e, 0x65, 0x74, 0x63, 0x6f, 0x6e, 0x66,
+ 0x40, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x3e, 0x0a, 0x0a,
+ 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20, 0x20, 0x41, 0x6e,
+ 0x64, 0x79, 0x20, 0x42, 0x69, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d,
+ 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x61, 0x6e, 0x64, 0x79, 0x40, 0x79,
+ 0x75, 0x6d, 0x61, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x3e, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20,
+ 0x20, 0x4d, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x20, 0x42, 0x6a, 0x6f, 0x72,
+ 0x6b, 0x6c, 0x75, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f,
+ 0x3a, 0x6d, 0x62, 0x6a, 0x40, 0x74, 0x61, 0x69, 0x6c, 0x2d, 0x66, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x3e, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72,
+ 0x3a, 0x20, 0x20, 0x20, 0x4a, 0x75, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x20,
+ 0x53, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65,
+ 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x2e, 0x73,
+ 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65, 0x72,
+ 0x40, 0x6a, 0x61, 0x63, 0x6f, 0x62, 0x73, 0x2d, 0x75, 0x6e, 0x69, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x3e, 0x0a, 0x0a,
+ 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20, 0x20, 0x4b, 0x65,
+ 0x6e, 0x74, 0x20, 0x57, 0x61, 0x74, 0x73, 0x65, 0x6e, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61,
+ 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6b, 0x77, 0x61, 0x74, 0x73, 0x65, 0x6e,
+ 0x40, 0x6a, 0x75, 0x6e, 0x69, 0x70, 0x65, 0x72, 0x2e, 0x6e, 0x65, 0x74,
+ 0x3e, 0x0a, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x20,
+ 0x20, 0x52, 0x6f, 0x62, 0x20, 0x57, 0x69, 0x6c, 0x74, 0x6f, 0x6e, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c,
+ 0x72, 0x77, 0x69, 0x6c, 0x74, 0x6f, 0x6e, 0x40, 0x63, 0x69, 0x73, 0x63,
+ 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69,
+ 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
+ 0x2c, 0x0a, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x0a, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x73, 0x2e, 0x0a, 0x0a, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
+ 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x38, 0x20, 0x49,
+ 0x45, 0x54, 0x46, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e,
+ 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e,
+ 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x20, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x0a,
+ 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x73, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d,
+ 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x0a, 0x77,
+ 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66,
+ 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x69, 0x73, 0x20,
+ 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x70, 0x75,
+ 0x72, 0x73, 0x75, 0x61, 0x6e, 0x74, 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73,
+ 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74,
+ 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64,
+ 0x20, 0x42, 0x53, 0x44, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65,
+ 0x0a, 0x73, 0x65, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x74, 0x68, 0x20, 0x69,
+ 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x2e,
+ 0x63, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45, 0x54,
+ 0x46, 0x20, 0x54, 0x72, 0x75, 0x73, 0x74, 0x27, 0x73, 0x20, 0x4c, 0x65,
+ 0x67, 0x61, 0x6c, 0x20, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x73, 0x0a, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x6f, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x44, 0x6f, 0x63, 0x75,
+ 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a,
+ 0x2f, 0x2f, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x65, 0x2e, 0x69, 0x65,
+ 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e,
+ 0x73, 0x65, 0x2d, 0x69, 0x6e, 0x66, 0x6f, 0x29, 0x2e, 0x0a, 0x0a, 0x54,
+ 0x68, 0x69, 0x73, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x58,
+ 0x58, 0x58, 0x58, 0x3b, 0x20, 0x73, 0x65, 0x65, 0x0a, 0x74, 0x68, 0x65,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x67,
+ 0x61, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x22,
+ 0x3b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30,
+ 0x31, 0x38, 0x2d, 0x30, 0x31, 0x2d, 0x31, 0x37, 0x20, 0x7b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x41,
+ 0x64, 0x64, 0x65, 0x64, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c,
+ 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73,
+ 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x22, 0x52, 0x46, 0x43, 0x20, 0x58, 0x58, 0x58, 0x58, 0x3a, 0x20,
+ 0x59, 0x41, 0x4e, 0x47, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79,
+ 0x2e, 0x22, 0x3b, 0x7d, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x32, 0x30, 0x31, 0x36, 0x2d, 0x30, 0x34, 0x2d, 0x30, 0x39, 0x20,
+ 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x22, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46, 0x43, 0x20,
+ 0x37, 0x38, 0x39, 0x35, 0x3a, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x4d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
+ 0x79, 0x2e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66,
+ 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2d, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x70,
+ 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5c, 0x64, 0x7b, 0x34,
+ 0x7d, 0x2d, 0x5c, 0x64, 0x7b, 0x32, 0x7d, 0x2d, 0x5c, 0x64, 0x7b, 0x32,
+ 0x7d, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x63, 0x20, 0x64, 0x61, 0x74, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x59,
+ 0x59, 0x59, 0x59, 0x2d, 0x4d, 0x4d, 0x2d, 0x44, 0x44, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x22, 0x3b, 0x7d, 0x67, 0x72, 0x6f, 0x75,
+ 0x70, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x73, 0x20, 0x7b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x50,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x69, 0x6e,
+ 0x67, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3b, 0x6d, 0x61, 0x6e,
+ 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x22, 0x54, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x22,
+ 0x3b, 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x59,
+ 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f,
+ 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74,
+ 0x65, 0x2e, 0x20, 0x20, 0x49, 0x66, 0x20, 0x6e, 0x6f, 0x20, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59,
+ 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f,
+ 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x69,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e,
+ 0x74, 0x69, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x7d, 0x67,
+ 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69,
+ 0x73, 0x74, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20,
+ 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x65, 0x61,
+ 0x66, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x73, 0x75, 0x62,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65,
+ 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69,
+ 0x6e, 0x65, 0x74, 0x3a, 0x75, 0x72, 0x69, 0x3b, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x43, 0x6f, 0x6e,
+ 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61, 0x20, 0x55, 0x52, 0x4c, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x0a, 0x72, 0x65, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20,
+ 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x0a, 0x0a,
+ 0x54, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x77, 0x69,
+ 0x6c, 0x6c, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x62, 0x65, 0x20, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x55, 0x52, 0x4c,
+ 0x0a, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x61, 0x6c,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x22, 0x3b, 0x7d, 0x7d, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x7b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x50,
+ 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x69, 0x6e, 0x67,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x6c, 0x69,
+ 0x73, 0x74, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x7b,
+ 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x61, 0x72, 0x65, 0x0a, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74,
+ 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x2c, 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64,
+ 0x6c, 0x65, 0x73, 0x73, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20,
+ 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b,
+ 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x79, 0x61, 0x6e,
+ 0x67, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x22, 0x41, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20,
+ 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e,
+ 0x22, 0x3b, 0x7d, 0x7d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, 0x76,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20,
+ 0x22, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0x3b, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x4c, 0x69,
+ 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x64,
+ 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e,
+ 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x0a, 0x4e, 0x6f, 0x74,
+ 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x63,
+ 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70,
+ 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20,
+ 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20,
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x4d, 0x41, 0x59, 0x20, 0x61, 0x70,
+ 0x70, 0x65, 0x61, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x0a,
+ 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x27, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x27, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65,
+ 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6c, 0x65,
+ 0x61, 0x66, 0x72, 0x65, 0x66, 0x20, 0x7b, 0x70, 0x61, 0x74, 0x68, 0x20,
+ 0x22, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x7d,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x41, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x61,
+ 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x0a, 0x65, 0x6e, 0x74, 0x72,
+ 0x79, 0x2e, 0x22, 0x3b, 0x7d, 0x7d, 0x7d, 0x67, 0x72, 0x6f, 0x75, 0x70,
+ 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x73,
+ 0x65, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
+ 0x73, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x22, 0x41, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62,
+ 0x65, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x73,
+ 0x65, 0x74, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x41, 0x6e, 0x20, 0x61, 0x72, 0x62, 0x69,
+ 0x74, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x20, 0x73, 0x65, 0x74, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x65, 0x61, 0x66,
+ 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x63,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b,
+ 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x72,
+ 0x75, 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x0a, 0x73, 0x65, 0x74, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x20, 0x73, 0x65, 0x74, 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65,
+ 0x70, 0x74, 0x0a, 0x27, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d,
+ 0x27, 0x2c, 0x20, 0x68, 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22,
+ 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x6e, 0x20, 0x65, 0x6e,
+ 0x74, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x70, 0x61,
+ 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x73, 0x65, 0x74,
+ 0x20, 0x6f, 0x66, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65,
+ 0x64, 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72,
+ 0x65, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2d, 0x61,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x0a, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e,
+ 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x0a, 0x54,
+ 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x73,
+ 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x75, 0x73,
+ 0x65, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x73, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74, 0x3a, 0x75, 0x72, 0x69,
+ 0x3b, 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74,
+ 0x72, 0x75, 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x75, 0x73, 0x65, 0x73, 0x20, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x2d,
+ 0x6c, 0x69, 0x73, 0x74, 0x3b, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x73, 0x75,
+ 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x7b, 0x6b, 0x65, 0x79,
+ 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x45, 0x61, 0x63,
+ 0x68, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x72, 0x65, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x73,
+ 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x70, 0x61, 0x72, 0x65,
+ 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b,
+ 0x75, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x73, 0x3b, 0x75, 0x73, 0x65,
+ 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c,
+ 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x3b, 0x7d, 0x75, 0x73,
+ 0x65, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+ 0x74, 0x65, 0x72, 0x73, 0x3b, 0x7d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x69,
+ 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x2d, 0x6f, 0x6e, 0x6c, 0x79, 0x2d, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x6e, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x69, 0x73,
+ 0x74, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x0a,
+ 0x72, 0x65, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x72, 0x6f,
+ 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x63, 0x6f, 0x6c, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62,
+ 0x6c, 0x65, 0x0a, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x4d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x6c, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d,
+ 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x4d, 0x41, 0x59, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e,
+ 0x20, 0x20, 0x54, 0x68, 0x69, 0x73, 0x0a, 0x63, 0x61, 0x6e, 0x20, 0x6f,
+ 0x63, 0x63, 0x75, 0x72, 0x20, 0x69, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74,
+ 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73,
+ 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c,
+ 0x20, 0x62, 0x75, 0x74, 0x0a, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79,
+ 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x72,
+ 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2d, 0x64, 0x61, 0x74, 0x65,
+ 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70,
+ 0x6f, 0x72, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e,
+ 0x67, 0x3a, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x59,
+ 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x20,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2d,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b,
+ 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x30, 0x3b, 0x7d, 0x7d, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x0a, 0x41, 0x20,
+ 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x20, 0x72, 0x65, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x0a, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41,
+ 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e,
+ 0x65, 0x74, 0x3a, 0x75, 0x72, 0x69, 0x3b, 0x6d, 0x61, 0x6e, 0x64, 0x61,
+ 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54,
+ 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x75,
+ 0x73, 0x65, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x3b, 0x6c,
+ 0x69, 0x73, 0x74, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65,
+ 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x45, 0x61, 0x63, 0x68, 0x20, 0x65, 0x6e, 0x74, 0x72,
+ 0x79, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x75, 0x73, 0x65, 0x73, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61,
+ 0x66, 0x73, 0x3b, 0x75, 0x73, 0x65, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69,
+ 0x73, 0x74, 0x3b, 0x7d, 0x7d, 0x7d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69,
+ 0x6e, 0x67, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72,
+ 0x61, 0x72, 0x79, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x73, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e,
+ 0x47, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x64, 0x61,
+ 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65,
+ 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x69, 0x6e, 0x67, 0x0a, 0x73, 0x6f, 0x20, 0x69, 0x74, 0x20,
+ 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x75, 0x73, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e,
+ 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f,
+ 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x6c, 0x69,
+ 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x73, 0x65,
+ 0x74, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x22, 0x41, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72,
+ 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x73, 0x2e, 0x22, 0x3b,
+ 0x75, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d,
+ 0x73, 0x65, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+ 0x72, 0x73, 0x3b, 0x7d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e, 0x61,
+ 0x6d, 0x65, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x0a, 0x64, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61,
+ 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x41, 0x6e, 0x20,
+ 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61, 0x72, 0x79, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x65, 0x61, 0x66,
+ 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x63,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x3b,
+ 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x72,
+ 0x75, 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67,
+ 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x61, 0x66,
+ 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x69, 0x6e, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2c, 0x20, 0x65,
+ 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x27, 0x63, 0x68, 0x65, 0x63, 0x6b,
+ 0x73, 0x75, 0x6d, 0x27, 0x2c, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x65, 0x61,
+ 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x2d, 0x73, 0x65, 0x74, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x6c, 0x65, 0x61, 0x66, 0x72, 0x65, 0x66, 0x20, 0x7b, 0x70, 0x61, 0x74,
+ 0x68, 0x20, 0x22, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x22, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x22, 0x41, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x73,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x7d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e,
+ 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x64, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
+ 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x45, 0x61, 0x63,
+ 0x68, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20,
+ 0x69, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x69,
+ 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x2e, 0x0a,
+ 0x0a, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
+ 0x4d, 0x55, 0x53, 0x54, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74,
+ 0x69, 0x61, 0x74, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x65, 0x6e, 0x74,
+ 0x72, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c,
+ 0x69, 0x73, 0x74, 0x20, 0x70, 0x65, 0x72, 0x0a, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
+ 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x45, 0x61, 0x63, 0x68, 0x20, 0x64, 0x61,
+ 0x74, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61,
+ 0x6d, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x53, 0x48, 0x4f, 0x55,
+ 0x4c, 0x44, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x66, 0x20, 0x7b,
+ 0x62, 0x61, 0x73, 0x65, 0x20, 0x64, 0x73, 0x3a, 0x64, 0x61, 0x74, 0x61,
+ 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6c,
+ 0x65, 0x61, 0x66, 0x72, 0x65, 0x66, 0x20, 0x7b, 0x70, 0x61, 0x74, 0x68,
+ 0x20, 0x22, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3b, 0x7d, 0x6d, 0x61,
+ 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x72, 0x75, 0x65,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x22, 0x41, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65,
+ 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x64, 0x61,
+ 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x7d,
+ 0x7d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x79,
+ 0x61, 0x6e, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20,
+ 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x66, 0x61, 0x6c, 0x73,
+ 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x61,
+ 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20,
+ 0x6d, 0x65, 0x74, 0x61, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x65, 0x73, 0x73, 0x65,
+ 0x73, 0x2e, 0x22, 0x3b, 0x75, 0x73, 0x65, 0x73, 0x20, 0x79, 0x61, 0x6e,
+ 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2d, 0x70, 0x61,
+ 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x3b, 0x6c, 0x65, 0x61,
+ 0x66, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x7b,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b,
+ 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x72,
+ 0x75, 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x2d, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x27, 0x79, 0x61, 0x6e, 0x67,
+ 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x27, 0x20, 0x74, 0x72,
+ 0x65, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x63, 0x68, 0x61,
+ 0x6e, 0x67, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65,
+ 0x61, 0x66, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x0a, 0x27, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x6c,
+ 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x27, 0x20, 0x74, 0x72, 0x65, 0x65,
+ 0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x27, 0x79, 0x61,
+ 0x6e, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2f, 0x63,
+ 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x27, 0x2c, 0x20, 0x68, 0x61,
+ 0x73, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x7d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x6c, 0x69, 0x62, 0x72,
+ 0x61, 0x72, 0x79, 0x2d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x7b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77,
+ 0x68, 0x65, 0x6e, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x68,
+ 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2e, 0x22,
+ 0x3b, 0x7d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x7b,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65,
+ 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73,
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20,
+ 0x61, 0x73, 0x20, 0x61, 0x20, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e,
+ 0x67, 0x0a, 0x73, 0x6f, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20,
+ 0x62, 0x65, 0x20, 0x72, 0x65, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x6d, 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67,
+ 0x0a, 0x64, 0x61, 0x74, 0x61, 0x20, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
+ 0x75, 0x72, 0x65, 0x2e, 0x22, 0x3b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69,
+ 0x6e, 0x67, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2d, 0x6c, 0x65,
+ 0x61, 0x66, 0x73, 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20,
+ 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d,
+ 0x65, 0x74, 0x65, 0x72, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x59, 0x41,
+ 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67,
+ 0x3a, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x3b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20,
+ 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x6e, 0x69,
+ 0x6f, 0x6e, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x3b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
+ 0x20, 0x30, 0x3b, 0x7d, 0x7d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20,
+ 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x0a, 0x41, 0x20, 0x7a, 0x65,
+ 0x72, 0x6f, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x0a, 0x69, 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73,
+ 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x7d,
+ 0x7d, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x7b, 0x73,
+ 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63,
+ 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6c, 0x65, 0x61, 0x66,
+ 0x20, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x73, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e,
+ 0x65, 0x74, 0x3a, 0x75, 0x72, 0x69, 0x3b, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61,
+ 0x20, 0x55, 0x52, 0x4c, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65,
+ 0x61, 0x66, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6f, 0x6e, 0x6c, 0x79,
+ 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20,
+ 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x61, 0x20, 0x55, 0x52, 0x4c, 0x0a, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61,
+ 0x62, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x74, 0x72,
+ 0x69, 0x65, 0x76, 0x61, 0x6c, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x22,
+ 0x3b, 0x7d, 0x7d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x20, 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3b,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65,
+ 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x45, 0x61, 0x63, 0x68, 0x20,
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x72, 0x65, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6f, 0x6e, 0x65,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x0a, 0x63, 0x75, 0x72, 0x72,
+ 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
+ 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x22, 0x3b, 0x75, 0x73, 0x65, 0x73,
+ 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66,
+ 0x73, 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65,
+ 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x7d, 0x75, 0x73,
+ 0x65, 0x73, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2d, 0x6c, 0x65,
+ 0x61, 0x66, 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64,
+ 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x7d, 0x6c,
+ 0x65, 0x61, 0x66, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x6e, 0x65, 0x74,
+ 0x3a, 0x75, 0x72, 0x69, 0x3b, 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f,
+ 0x72, 0x79, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65,
+ 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x22, 0x54, 0x68, 0x65, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e,
+ 0x22, 0x3b, 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74,
+ 0x20, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x79, 0x61, 0x6e, 0x67,
+ 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x3b,
+ 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65,
+ 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x66, 0x65, 0x61, 0x74,
+ 0x75, 0x72, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x66, 0x72,
+ 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x0a,
+ 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2c,
+ 0x20, 0x72, 0x65, 0x67, 0x61, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x20,
+ 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x79,
+ 0x20, 0x61, 0x72, 0x65, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x69, 0x73, 0x74,
+ 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b,
+ 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65,
+ 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x59,
+ 0x41, 0x4e, 0x47, 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x20, 0x74, 0x6f, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x79, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e,
+ 0x63, 0x65, 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x20, 0x20, 0x4e, 0x6f,
+ 0x74, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x74, 0x68, 0x65, 0x20,
+ 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20,
+ 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69,
+ 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2c,
+ 0x20, 0x73, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65,
+ 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x4d, 0x41, 0x59, 0x20, 0x61,
+ 0x70, 0x70, 0x65, 0x61, 0x72, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e,
+ 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x27, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x27, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69,
+ 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76,
+ 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x27, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x27, 0x0a, 0x6c, 0x69,
+ 0x73, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20,
+ 0x27, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65,
+ 0x2d, 0x74, 0x79, 0x70, 0x65, 0x27, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x27, 0x69, 0x6d,
+ 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x27, 0x20, 0x66, 0x6f, 0x72,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b,
+ 0x75, 0x73, 0x65, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2d,
+ 0x6c, 0x65, 0x61, 0x66, 0x73, 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64,
+ 0x3b, 0x7d, 0x7d, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x63, 0x6f, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2d, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x7b, 0x65, 0x6e, 0x75, 0x6d,
+ 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x7b,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x22, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x72,
+ 0x65, 0x0a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2d, 0x61,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e,
+ 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x0a, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x20, 0x20,
+ 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65,
+ 0x73, 0x20, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x0a, 0x0a, 0x46,
+ 0x6f, 0x72, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x76, 0x65, 0x72, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x31, 0x20, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x6e,
+ 0x65, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x65, 0x6e, 0x74,
+ 0x72, 0x79, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x63, 0x6f, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x27, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x27,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69,
+ 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65,
+ 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x31, 0x2e, 0x31, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a,
+ 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x2e,
+ 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x76,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20,
+ 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x62,
+ 0x65, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x0a, 0x74, 0x68, 0x61, 0x6e, 0x20,
+ 0x6f, 0x6e, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x65,
+ 0x6e, 0x74, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x70,
+ 0x61, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74,
+ 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73,
+ 0x20, 0x72, 0x65, 0x75, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x66, 0x72,
+ 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x64, 0x6f, 0x65,
+ 0x73, 0x0a, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x63, 0x6f, 0x6c, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x69,
+ 0x62, 0x6c, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x20,
+ 0x66, 0x72, 0x6f, 0x6d, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x4d, 0x75, 0x6c,
+ 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x20, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x4d, 0x41,
+ 0x59, 0x0a, 0x65, 0x78, 0x69, 0x73, 0x74, 0x2e, 0x20, 0x54, 0x68, 0x69,
+ 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20,
+ 0x69, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x73, 0x61, 0x6d, 0x65, 0x20,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x64, 0x69, 0x66, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x22, 0x3b,
+ 0x7d, 0x7d, 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x79, 0x20,
+ 0x74, 0x72, 0x75, 0x65, 0x3b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20,
+ 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x49, 0x6e, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x6f,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20,
+ 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x0a, 0x66, 0x6f, 0x72,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x22, 0x3b, 0x7d, 0x6c, 0x69, 0x73,
+ 0x74, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20,
+ 0x7b, 0x6b, 0x65, 0x79, 0x20, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x72,
+ 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74,
+ 0x65, 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x45, 0x61, 0x63, 0x68, 0x20, 0x65, 0x6e, 0x74,
+ 0x72, 0x79, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x2e, 0x22, 0x3b, 0x75, 0x73, 0x65, 0x73, 0x20,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2d, 0x6c, 0x65, 0x61, 0x66, 0x73,
+ 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70,
+ 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x7d, 0x75, 0x73, 0x65,
+ 0x73, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2d, 0x6c, 0x65, 0x61,
+ 0x66, 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65,
+ 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x7d, 0x7d, 0x7d,
+ 0x7d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x20, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x66, 0x61, 0x6c,
+ 0x73, 0x65, 0x3b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65,
+ 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x43, 0x6f,
+ 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x6e, 0x69, 0x74,
+ 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2d,
+ 0x69, 0x64, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x3b, 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f, 0x72,
+ 0x79, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x73, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61,
+ 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2d, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x63, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x69, 0x6e, 0x67, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x63, 0x75, 0x72,
+ 0x72, 0x65, 0x6e, 0x74, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x20,
+ 0x20, 0x54, 0x68, 0x65, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
+ 0x4d, 0x55, 0x53, 0x54, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x69,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x27, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x27, 0x20, 0x6c, 0x69,
+ 0x73, 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73,
+ 0x0a, 0x68, 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64,
+ 0x2e, 0x22, 0x3b, 0x7d, 0x75, 0x73, 0x65, 0x73, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x65, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x7b, 0x73, 0x74,
+ 0x61, 0x74, 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61,
+ 0x74, 0x65, 0x64, 0x3b, 0x7d, 0x7d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x2d,
+ 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x2d, 0x63, 0x68, 0x61, 0x6e,
+ 0x67, 0x65, 0x20, 0x7b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x64,
+ 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x3b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x47,
+ 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x68, 0x65,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20,
+ 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x0a, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20,
+ 0x68, 0x61, 0x73, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x2e,
+ 0x22, 0x3b, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2d, 0x69, 0x64, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x6c, 0x65, 0x61, 0x66, 0x72, 0x65, 0x66, 0x20, 0x7b,
+ 0x70, 0x61, 0x74, 0x68, 0x20, 0x22, 0x2f, 0x79, 0x61, 0x6e, 0x67, 0x6c,
+ 0x69, 0x62, 0x3a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2d, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x2f, 0x79, 0x61, 0x6e, 0x67, 0x6c, 0x69, 0x62,
+ 0x3a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x73, 0x65, 0x74, 0x2d,
+ 0x69, 0x64, 0x22, 0x3b, 0x7d, 0x6d, 0x61, 0x6e, 0x64, 0x61, 0x74, 0x6f,
+ 0x72, 0x79, 0x20, 0x74, 0x72, 0x75, 0x65, 0x3b, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65,
+ 0x64, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2d, 0x73,
+ 0x65, 0x74, 0x2d, 0x69, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x69, 0x6e, 0x67,
+ 0x20, 0x74, 0x68, 0x65, 0x0a, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x73, 0x75, 0x62, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x20, 0x73,
+ 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x0a, 0x61,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72,
+ 0x61, 0x74, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x7d, 0x7d, 0x00
+};
diff --git a/models/ietf-yang-library@2018-01-17.yang b/models/ietf-yang-library@2018-01-17.yang
new file mode 100644
index 0000000..58d95c1
--- /dev/null
+++ b/models/ietf-yang-library@2018-01-17.yang
@@ -0,0 +1,577 @@
+ module ietf-yang-library {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
+ prefix "yanglib";
+
+ import ietf-yang-types {
+ prefix yang;
+ reference "RFC 6991: Common YANG Data Types.";
+ }
+ import ietf-inet-types {
+ prefix inet;
+ reference "RFC 6991: Common YANG Data Types.";
+ }
+ import ietf-datastores {
+ prefix ds;
+ reference "I-D.ietf-revised-datastores:
+ Network Management Datastore Architecture.";
+ }
+
+ organization
+ "IETF NETCONF (Network Configuration) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netconf/>
+ WG List: <mailto:netconf@ietf.org>
+
+ Author: Andy Bierman
+ <mailto:andy@yumaworks.com>
+
+ Author: Martin Bjorklund
+ <mailto:mbj@tail-f.com>
+
+ Author: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Author: Kent Watsen
+ <mailto:kwatsen@juniper.net>
+
+ Author: Rob Wilton
+ <rwilton@cisco.com>";
+
+ description
+ "This module contains information about the YANG server instance,
+ including the modules and datastores the server supports, and
+ which modules are present in which datastores.
+
+ Copyright (c) 2018 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC XXXX; see
+ the RFC itself for full legal notices.";
+
+ // RFC Ed.: update the date below with the date of RFC publication
+ // and remove this note.
+ // RFC Ed.: replace XXXX with actual RFC number and remove this
+ // note.
+ revision 2018-01-17 {
+ description
+ "Added support for multiple datastores.";
+ reference
+ "RFC XXXX: YANG Library.";
+ }
+ revision 2016-04-09 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7895: YANG Module Library.";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef revision-identifier {
+ type string {
+ pattern '\d{4}-\d{2}-\d{2}';
+ }
+ description
+ "Represents a specific date in YYYY-MM-DD format.";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping module-identification-leafs {
+ description
+ "Parameters for identifying YANG modules and submodules.";
+
+ leaf name {
+ type yang:yang-identifier;
+ mandatory true;
+ description
+ "The YANG module or submodule name.";
+ }
+ leaf revision {
+ type revision-identifier;
+ description
+ "The YANG module or submodule revision date. If no revision
+ statement is present in the YANG module or submodule, this
+ leaf is not instantiated.";
+ }
+ }
+
+ grouping location-leaf-list {
+ description
+ "Common location leaf list parameter for modules and
+ submodules.";
+
+ leaf-list location {
+ type inet:uri;
+ description
+ "Contains a URL that represents the YANG schema
+ resource for this module or submodule.
+
+ This leaf will only be present if there is a URL
+ available for retrieval of the schema for this entry.";
+ }
+ }
+
+ grouping implementation-parameters {
+ description
+ "Parameters for describing the implementation of a module.";
+
+ list feature {
+ key "name";
+ description
+ "List of YANG feature names from this module that are
+ supported by the server, regardless whether they are defined
+ in the module or any included submodule.";
+ leaf name {
+ type yang:yang-identifier;
+ description
+ "A feature supported by the server.";
+ }
+ }
+ list deviation {
+ key "module";
+ description
+ "List of YANG deviation modules used by this server to modify
+ the conformance of the module associated with this entry.
+ Note that the same module can be used for deviations for
+ multiple modules, so the same entry MAY appear within
+ multiple 'module' entries.";
+
+ leaf module {
+ type leafref {
+ path "../../../module/name";
+ }
+ description
+ "A module that deviates the module associated with this
+ entry.";
+ }
+ }
+ }
+
+ grouping module-set-parameters {
+ description
+ "A set of parameters that describe a module set.";
+
+ leaf name {
+ type string;
+ description
+ "An arbitrary name of the module set.";
+ }
+ leaf checksum {
+ type string;
+ config false;
+ mandatory true;
+ description
+ "A server-generated checksum of the contents of the module
+ set. The server MUST change the value of this leaf if the
+ information represented by the module set, except
+ 'checksum', has changed.";
+ }
+ list module {
+ key "name";
+ description
+ "An entry in this list represents a module implemented by the
+ server with a particular set of supported features and
+ deviations.
+
+ The server implements one or more protocol-accessible
+ objects defined in the YANG module identified in this entry.
+ This includes deviation statements defined in the module.";
+
+ uses module-identification-leafs;
+
+ leaf namespace {
+ type inet:uri;
+ mandatory true;
+ description
+ "The XML namespace identifier for this module.";
+ }
+
+ uses location-leaf-list;
+
+ list submodule {
+ key "name";
+ description
+ "Each entry represents one submodule within the
+ parent module.";
+ uses module-identification-leafs;
+ uses location-leaf-list;
+ }
+
+ uses implementation-parameters;
+ }
+ list import-only-module {
+ key "name revision";
+ description
+ "An entry in this list indicates that the server imports
+ reusable definitions from the specified revision of the
+ module, but does not implement any protocol accessible
+ objects from this revision.
+
+ Multiple entries for the same module name MAY exist. This
+ can occur if multiple modules import the same module, but
+ specify different revision-dates in the import statements.";
+
+ leaf name {
+ type yang:yang-identifier;
+ description
+ "The YANG module name.";
+ }
+ leaf revision {
+ type union {
+ type revision-identifier;
+ type string {
+ length 0;
+ }
+ }
+ description
+ "The YANG module or revision date.
+ A zero-length string is used if no revision statement
+ is present in the YANG module.";
+ }
+ leaf namespace {
+ type inet:uri;
+ mandatory true;
+ description
+ "The XML namespace identifier for this module.";
+ }
+
+ uses location-leaf-list;
+
+ list submodule {
+ key "name";
+ description
+ "Each entry represents one submodule within the
+ parent module.";
+
+ uses module-identification-leafs;
+ uses location-leaf-list;
+ }
+ }
+ }
+
+ grouping yang-library-parameters {
+ description
+ "The YANG library data structure is represented as a grouping
+ so it can be reused in configuration or another monitoring
+ data structure.";
+
+ list module-set {
+ key name;
+ description
+ "A set of modules that may be used by one or more schemas.";
+
+ uses module-set-parameters;
+ }
+
+ list schema {
+ key "name";
+ description
+ "A datastore schema that may be used by one or more
+ datastores.";
+
+ leaf name {
+ type string;
+ description
+ "An arbitrary name of the schema.";
+ }
+ leaf checksum {
+ type string;
+ config false;
+ mandatory true;
+ description
+ "A server-generated checksum of the contents of the schema.
+ The server MUST change the value of this leaf if the
+ information represented by the schema, except 'checksum',
+ has changed.";
+ }
+ leaf-list module-set {
+ type leafref {
+ path "../../module-set/name";
+ }
+ description
+ "A set of module-sets that are included in this schema.";
+ }
+ }
+
+ list datastore {
+ key "name";
+ description
+ "A datastore supported by this server.
+
+ Each datastore indicates which schema it supports.
+
+ The server MUST instantiate one entry in this list per
+ specific datastore it supports.
+
+ Each datstore entry with the same datastore schema SHOULD
+ reference the same schema.";
+
+ leaf name {
+ type identityref {
+ base ds:datastore;
+ }
+ description
+ "The identity of the datastore.";
+ }
+ leaf schema {
+ type leafref {
+ path "../../schema/name";
+ }
+ mandatory true;
+
+ description
+ "A reference to the schema supported by this datastore.";
+ }
+ }
+ }
+
+ /*
+ * Top-level container
+ */
+
+ container yang-library {
+ config false;
+ description
+ "Container providing all the YANG meta information the
+ server possesses.";
+
+ uses yang-library-parameters;
+
+ leaf checksum {
+ type string;
+ mandatory true;
+ description
+ "A server-generated checksum of the contents of the
+ 'yang-library' tree. The server MUST change the value of
+ this leaf if the information represented by the
+ 'yang-library' tree, except 'yang-library/checksum', has
+ changed.";
+ }
+ }
+
+ /*
+ * Notifications
+ */
+
+ notification yang-library-update {
+ description
+ "Generated when any YANG library information on the
+ server has changed.";
+ }
+
+ /*
+ * Legacy groupings
+ */
+
+ grouping module-list {
+ status deprecated;
+ description
+ "The module data structure is represented as a grouping
+ so it can be reused in configuration or another monitoring
+ data structure.";
+
+ grouping common-leafs {
+ status deprecated;
+ description
+ "Common parameters for YANG modules and submodules.";
+
+ leaf name {
+ type yang:yang-identifier;
+ status deprecated;
+ description
+ "The YANG module or submodule name.";
+ }
+ leaf revision {
+ type union {
+ type revision-identifier;
+ type string {
+ length 0;
+ }
+ }
+ status deprecated;
+ description
+ "The YANG module or submodule revision date.
+ A zero-length string is used if no revision statement
+ is present in the YANG module or submodule.";
+ }
+ }
+ grouping schema-leaf {
+ status deprecated;
+ description
+ "Common schema leaf parameter for modules and submodules.";
+ leaf schema {
+ type inet:uri;
+ status deprecated;
+ description
+ "Contains a URL that represents the YANG schema
+ resource for this module or submodule.
+
+ This leaf will only be present if there is a URL
+ available for retrieval of the schema for this entry.";
+ }
+ }
+
+ list module {
+ key "name revision";
+ status deprecated;
+ description
+ "Each entry represents one revision of one module
+ currently supported by the server.";
+
+ uses common-leafs {
+ status deprecated;
+ }
+ uses schema-leaf {
+ status deprecated;
+ }
+
+ leaf namespace {
+ type inet:uri;
+ mandatory true;
+ status deprecated;
+ description
+ "The XML namespace identifier for this module.";
+ }
+ leaf-list feature {
+ type yang:yang-identifier;
+ status deprecated;
+ description
+ "List of YANG feature names from this module that are
+ supported by the server, regardless whether they are
+ defined in the module or any included submodule.";
+ }
+ list deviation {
+ key "name revision";
+ status deprecated;
+ description
+ "List of YANG deviation module names and revisions
+ used by this server to modify the conformance of
+ the module associated with this entry. Note that
+ the same module can be used for deviations for
+ multiple modules, so the same entry MAY appear
+ within multiple 'module' entries.
+
+ The deviation module MUST be present in the 'module'
+ list, with the same name and revision values.
+ The 'conformance-type' value will be 'implement' for
+ the deviation module.";
+ uses common-leafs {
+ status deprecated;
+ }
+ }
+ leaf conformance-type {
+ type enumeration {
+ enum implement {
+ description
+ "Indicates that the server implements one or more
+ protocol-accessible objects defined in the YANG module
+ identified in this entry. This includes deviation
+ statements defined in the module.
+
+ For YANG version 1.1 modules, there is at most one
+ module entry with conformance type 'implement' for a
+ particular module name, since YANG 1.1 requires that
+ at most one revision of a module is implemented.
+
+ For YANG version 1 modules, there SHOULD NOT be more
+ than one module entry for a particular module name.";
+ }
+ enum import {
+ description
+ "Indicates that the server imports reusable definitions
+ from the specified revision of the module, but does
+ not implement any protocol accessible objects from
+ this revision.
+
+ Multiple module entries for the same module name MAY
+ exist. This can occur if multiple modules import the
+ same module, but specify different revision-dates in
+ the import statements.";
+ }
+ }
+ mandatory true;
+ status deprecated;
+ description
+ "Indicates the type of conformance the server is claiming
+ for the YANG module identified by this entry.";
+ }
+ list submodule {
+ key "name revision";
+ status deprecated;
+ description
+ "Each entry represents one submodule within the
+ parent module.";
+ uses common-leafs {
+ status deprecated;
+ }
+ uses schema-leaf {
+ status deprecated;
+ }
+ }
+ }
+ }
+
+ /*
+ * Legacy operational state data nodes
+ */
+
+ container modules-state {
+ config false;
+ status deprecated;
+ description
+ "Contains YANG module monitoring information.";
+
+ leaf module-set-id {
+ type string;
+ mandatory true;
+ status deprecated;
+ description
+ "Contains a server-specific identifier representing
+ the current set of modules and submodules. The
+ server MUST change the value of this leaf if the
+ information represented by the 'module' list instances
+ has changed.";
+ }
+
+ uses module-list {
+ status deprecated;
+ }
+ }
+
+ /*
+ * Legacy notifications
+ */
+
+ notification yang-library-change {
+ status deprecated;
+ description
+ "Generated when the set of modules and submodules supported
+ by the server has changed.";
+ leaf module-set-id {
+ type leafref {
+ path "/yanglib:modules-state/yanglib:module-set-id";
+ }
+ mandatory true;
+ status deprecated;
+ description
+ "Contains the module-set-id value representing the
+ set of modules and submodules supported at the server
+ at the time the notification is generated.";
+ }
+ }
+
+ }
diff --git a/models/ietf-yang-metadata@2016-08-05.h b/models/ietf-yang-metadata@2016-08-05.h
new file mode 100644
index 0000000..5b2665b
--- /dev/null
+++ b/models/ietf-yang-metadata@2016-08-05.h
@@ -0,0 +1,220 @@
+unsigned char ietf_yang_metadata_2016_08_05_yang[] = {
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d,
+ 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x20, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x20, 0x22, 0x75, 0x72, 0x6e, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x3a, 0x70,
+ 0x61, 0x72, 0x61, 0x6d, 0x73, 0x3a, 0x78, 0x6d, 0x6c, 0x3a, 0x6e, 0x73,
+ 0x3a, 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x2d, 0x79,
+ 0x61, 0x6e, 0x67, 0x2d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x22, 0x3b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x20, 0x6d, 0x64, 0x3b,
+ 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x22, 0x49, 0x45, 0x54, 0x46, 0x20, 0x4e, 0x45, 0x54, 0x4d, 0x4f,
+ 0x44, 0x20, 0x28, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x20, 0x44,
+ 0x61, 0x74, 0x61, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67,
+ 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x29, 0x20, 0x57,
+ 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70,
+ 0x22, 0x3b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x0a, 0x22, 0x57,
+ 0x47, 0x20, 0x57, 0x65, 0x62, 0x3a, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x74,
+ 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x74, 0x72,
+ 0x61, 0x63, 0x6b, 0x65, 0x72, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f,
+ 0x72, 0x67, 0x2f, 0x77, 0x67, 0x2f, 0x6e, 0x65, 0x74, 0x6d, 0x6f, 0x64,
+ 0x2f, 0x3e, 0x0a, 0x0a, 0x57, 0x47, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x3a,
+ 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6e, 0x65,
+ 0x74, 0x6d, 0x6f, 0x64, 0x40, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72,
+ 0x67, 0x3e, 0x0a, 0x0a, 0x57, 0x47, 0x20, 0x43, 0x68, 0x61, 0x69, 0x72,
+ 0x3a, 0x20, 0x4c, 0x6f, 0x75, 0x20, 0x42, 0x65, 0x72, 0x67, 0x65, 0x72,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6c, 0x62, 0x65, 0x72,
+ 0x67, 0x65, 0x72, 0x40, 0x6c, 0x61, 0x62, 0x6e, 0x2e, 0x6e, 0x65, 0x74,
+ 0x3e, 0x0a, 0x0a, 0x57, 0x47, 0x20, 0x43, 0x68, 0x61, 0x69, 0x72, 0x3a,
+ 0x20, 0x4b, 0x65, 0x6e, 0x74, 0x20, 0x57, 0x61, 0x74, 0x73, 0x65, 0x6e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6b, 0x77, 0x61, 0x74,
+ 0x73, 0x65, 0x6e, 0x40, 0x6a, 0x75, 0x6e, 0x69, 0x70, 0x65, 0x72, 0x2e,
+ 0x6e, 0x65, 0x74, 0x3e, 0x0a, 0x0a, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72,
+ 0x3a, 0x20, 0x20, 0x20, 0x4c, 0x61, 0x64, 0x69, 0x73, 0x6c, 0x61, 0x76,
+ 0x20, 0x4c, 0x68, 0x6f, 0x74, 0x6b, 0x61, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c,
+ 0x74, 0x6f, 0x3a, 0x6c, 0x68, 0x6f, 0x74, 0x6b, 0x61, 0x40, 0x6e, 0x69,
+ 0x63, 0x2e, 0x63, 0x7a, 0x3e, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73,
+ 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20,
+ 0x27, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x27, 0x20,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x0a, 0x66, 0x6f,
+ 0x72, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x43, 0x6f,
+ 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20,
+ 0x32, 0x30, 0x31, 0x36, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x54, 0x72,
+ 0x75, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x0a, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20,
+ 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x52, 0x65, 0x64, 0x69, 0x73, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72,
+ 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x6f, 0x72, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74,
+ 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74,
+ 0x74, 0x65, 0x64, 0x20, 0x70, 0x75, 0x72, 0x73, 0x75, 0x61, 0x6e, 0x74,
+ 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x6f, 0x0a, 0x74, 0x68, 0x65, 0x20,
+ 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x6d, 0x70,
+ 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x42, 0x53, 0x44, 0x20, 0x4c,
+ 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x73, 0x65, 0x74, 0x0a, 0x66,
+ 0x6f, 0x72, 0x74, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x2e, 0x63, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x54, 0x72, 0x75, 0x73,
+ 0x74, 0x27, 0x73, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x50, 0x72,
+ 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x52, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x49, 0x45, 0x54,
+ 0x46, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a,
+ 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x72, 0x75, 0x73,
+ 0x74, 0x65, 0x65, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x69, 0x6e, 0x66,
+ 0x6f, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x37, 0x39, 0x35, 0x32, 0x0a, 0x28, 0x68,
+ 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x72, 0x66,
+ 0x63, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x72, 0x66, 0x63, 0x37, 0x39, 0x35,
+ 0x32, 0x29, 0x3b, 0x20, 0x73, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x52, 0x46, 0x43, 0x20, 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x0a, 0x66,
+ 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x67, 0x61,
+ 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x22, 0x3b,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31,
+ 0x36, 0x2d, 0x30, 0x38, 0x2d, 0x30, 0x35, 0x20, 0x7b, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x49, 0x6e,
+ 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x22, 0x52, 0x46, 0x43, 0x20, 0x37, 0x39, 0x35, 0x32,
+ 0x3a, 0x20, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x55, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x59,
+ 0x41, 0x4e, 0x47, 0x22, 0x3b, 0x7d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x7b, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x73, 0x20, 0x69, 0x6e, 0x0a, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x27, 0x6d, 0x64, 0x3a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x27, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65,
+ 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x65, 0x61,
+ 0x72, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x0a, 0x61, 0x74, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f,
+ 0x64, 0x75, 0x6c, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x75, 0x62, 0x6d,
+ 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x2c, 0x20, 0x69, 0x2e, 0x65, 0x2e, 0x2c,
+ 0x20, 0x69, 0x74, 0x0a, 0x62, 0x65, 0x63, 0x6f, 0x6d, 0x65, 0x73, 0x20,
+ 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x61, 0x6c, 0x74, 0x65, 0x72, 0x6e,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x41, 0x42, 0x4e, 0x46, 0x20, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x66, 0x6f,
+ 0x72, 0x0a, 0x27, 0x62, 0x6f, 0x64, 0x79, 0x2d, 0x73, 0x74, 0x6d, 0x74,
+ 0x73, 0x27, 0x20, 0x28, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x31, 0x34, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x46, 0x43, 0x20, 0x37, 0x39,
+ 0x35, 0x30, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x61, 0x72,
+ 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x27, 0x6d, 0x64, 0x3a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x0a, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x20, 0x20, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x63, 0x74,
+ 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x69,
+ 0x73, 0x20, 0x61, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x61, 0x73, 0x0a, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x36, 0x2e, 0x32, 0x20, 0x6f, 0x66,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x37, 0x39, 0x35, 0x30, 0x2e, 0x0a, 0x0a,
+ 0x41, 0x6e, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x27, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x27, 0x20, 0x73, 0x74, 0x61, 0x74,
+ 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69,
+ 0x74, 0x73, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47,
+ 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x77,
+ 0x68, 0x69, 0x63, 0x68, 0x0a, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65,
+ 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x0a,
+ 0x77, 0x61, 0x79, 0x20, 0x61, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
+ 0x20, 0x6c, 0x65, 0x61, 0x66, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6e,
+ 0x6f, 0x64, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x27, 0x74, 0x79, 0x70, 0x65, 0x27, 0x20, 0x73, 0x74, 0x61,
+ 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65,
+ 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x0a,
+ 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x75, 0x73,
+ 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c,
+ 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61,
+ 0x72, 0x64, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x73, 0x75, 0x62, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x28, 0x61,
+ 0x6c, 0x6c, 0x0a, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x29, 0x3a, 0x20, 0x27, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x27, 0x2c, 0x20, 0x27, 0x69, 0x66,
+ 0x2d, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x27, 0x2c, 0x20, 0x27,
+ 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x27, 0x2c, 0x0a,
+ 0x27, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x27, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x27, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x27, 0x2e, 0x0a, 0x0a,
+ 0x41, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x20, 0x61, 0x6e, 0x6e,
+ 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f,
+ 0x72, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x70, 0x61, 0x72,
+ 0x74, 0x69, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x79, 0x0a, 0x69, 0x6e,
+ 0x63, 0x6c, 0x75, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x61, 0x6d, 0x6f, 0x6e, 0x67, 0x0a,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x64, 0x76, 0x65, 0x72, 0x74, 0x69, 0x73,
+ 0x65, 0x64, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75,
+ 0x6c, 0x65, 0x73, 0x2c, 0x20, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x69,
+ 0x6e, 0x20, 0x61, 0x20, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x20,
+ 0x3c, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x3e, 0x0a, 0x6d, 0x65, 0x73, 0x73,
+ 0x61, 0x67, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61,
+ 0x72, 0x79, 0x20, 0x28, 0x52, 0x46, 0x43, 0x20, 0x37, 0x39, 0x35, 0x30,
+ 0x29, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6e, 0x0a, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63,
+ 0x68, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x69,
+ 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x64,
+ 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x6e,
+ 0x79, 0x0a, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x61, 0x64,
+ 0x76, 0x65, 0x72, 0x74, 0x69, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x0a,
+ 0x0a, 0x58, 0x4d, 0x4c, 0x20, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e,
+ 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x65,
+ 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x66, 0x20, 0x61,
+ 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x61,
+ 0x72, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69,
+ 0x6e, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x37, 0x39, 0x35, 0x32, 0x2e, 0x22,
+ 0x3b, 0x7d, 0x7d, 0x00
+};
diff --git a/models/ietf-yang-metadata@2016-08-05.yang b/models/ietf-yang-metadata@2016-08-05.yang
new file mode 100644
index 0000000..f59426a
--- /dev/null
+++ b/models/ietf-yang-metadata@2016-08-05.yang
@@ -0,0 +1,80 @@
+module ietf-yang-metadata {
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-metadata";
+ prefix md;
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+ contact
+ "WG Web: <https://datatracker.ietf.org/wg/netmod/>
+
+ WG List: <mailto:netmod@ietf.org>
+
+ WG Chair: Lou Berger
+ <mailto:lberger@labn.net>
+
+ WG Chair: Kent Watsen
+ <mailto:kwatsen@juniper.net>
+
+ Editor: Ladislav Lhotka
+ <mailto:lhotka@nic.cz>";
+ description
+ "This YANG module defines an 'extension' statement that allows
+ for defining metadata annotations.
+
+ Copyright (c) 2016 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 7952
+ (http://www.rfc-editor.org/info/rfc7952); see the RFC itself
+ for full legal notices.";
+
+ revision 2016-08-05 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 7952: Defining and Using Metadata with YANG";
+ }
+
+ extension annotation {
+ argument name;
+ description
+ "This extension allows for defining metadata annotations in
+ YANG modules. The 'md:annotation' statement can appear only
+ at the top level of a YANG module or submodule, i.e., it
+ becomes a new alternative in the ABNF production rule for
+ 'body-stmts' (Section 14 in RFC 7950).
+
+ The argument of the 'md:annotation' statement defines the name
+ of the annotation. Syntactically, it is a YANG identifier as
+ defined in Section 6.2 of RFC 7950.
+
+ An annotation defined with this 'extension' statement inherits
+ the namespace and other context from the YANG module in which
+ it is defined.
+
+ The data type of the annotation value is specified in the same
+ way as for a leaf data node using the 'type' statement.
+
+ The semantics of the annotation and other documentation can be
+ specified using the following standard YANG substatements (all
+ are optional): 'description', 'if-feature', 'reference',
+ 'status', and 'units'.
+
+ A server announces support for a particular annotation by
+ including the module in which the annotation is defined among
+ the advertised YANG modules, e.g., in a NETCONF <hello>
+ message or in the YANG library (RFC 7950). The annotation can
+ then be attached to any instance of a data node defined in any
+ YANG module that is advertised by the server.
+
+ XML encoding and JSON encoding of annotations are defined in
+ RFC 7952.";
+ }
+}
diff --git a/models/ietf-yang-types@2013-07-15.h b/models/ietf-yang-types@2013-07-15.h
new file mode 100644
index 0000000..45ce2d0
--- /dev/null
+++ b/models/ietf-yang-types@2013-07-15.h
@@ -0,0 +1,1292 @@
+unsigned char ietf_yang_types_2013_07_15_yang[] = {
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d,
+ 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x20, 0x7b,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x22, 0x75,
+ 0x72, 0x6e, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x3a, 0x70, 0x61, 0x72, 0x61,
+ 0x6d, 0x73, 0x3a, 0x78, 0x6d, 0x6c, 0x3a, 0x6e, 0x73, 0x3a, 0x79, 0x61,
+ 0x6e, 0x67, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x2d, 0x79, 0x61, 0x6e, 0x67,
+ 0x2d, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3b, 0x70, 0x72, 0x65, 0x66,
+ 0x69, 0x78, 0x20, 0x22, 0x79, 0x61, 0x6e, 0x67, 0x22, 0x3b, 0x6f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x49, 0x45, 0x54, 0x46, 0x20, 0x4e, 0x45, 0x54, 0x4d, 0x4f, 0x44, 0x20,
+ 0x28, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x20, 0x44, 0x61, 0x74,
+ 0x61, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x4c,
+ 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x29, 0x20, 0x57, 0x6f, 0x72,
+ 0x6b, 0x69, 0x6e, 0x67, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3b,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x0a, 0x22, 0x57, 0x47, 0x20,
+ 0x57, 0x65, 0x62, 0x3a, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70,
+ 0x3a, 0x2f, 0x2f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x69, 0x65, 0x74,
+ 0x66, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x77, 0x67, 0x2f, 0x6e, 0x65, 0x74,
+ 0x6d, 0x6f, 0x64, 0x2f, 0x3e, 0x0a, 0x57, 0x47, 0x20, 0x4c, 0x69, 0x73,
+ 0x74, 0x3a, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a,
+ 0x6e, 0x65, 0x74, 0x6d, 0x6f, 0x64, 0x40, 0x69, 0x65, 0x74, 0x66, 0x2e,
+ 0x6f, 0x72, 0x67, 0x3e, 0x0a, 0x0a, 0x57, 0x47, 0x20, 0x43, 0x68, 0x61,
+ 0x69, 0x72, 0x3a, 0x20, 0x44, 0x61, 0x76, 0x69, 0x64, 0x20, 0x4b, 0x65,
+ 0x73, 0x73, 0x65, 0x6e, 0x73, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f,
+ 0x3a, 0x64, 0x61, 0x76, 0x69, 0x64, 0x2e, 0x6b, 0x65, 0x73, 0x73, 0x65,
+ 0x6e, 0x73, 0x40, 0x6e, 0x73, 0x6e, 0x2e, 0x63, 0x6f, 0x6d, 0x3e, 0x0a,
+ 0x0a, 0x57, 0x47, 0x20, 0x43, 0x68, 0x61, 0x69, 0x72, 0x3a, 0x20, 0x4a,
+ 0x75, 0x65, 0x72, 0x67, 0x65, 0x6e, 0x20, 0x53, 0x63, 0x68, 0x6f, 0x65,
+ 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69,
+ 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x2e, 0x73, 0x63, 0x68, 0x6f, 0x65, 0x6e,
+ 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65, 0x72, 0x40, 0x6a, 0x61, 0x63, 0x6f,
+ 0x62, 0x73, 0x2d, 0x75, 0x6e, 0x69, 0x76, 0x65, 0x72, 0x73, 0x69, 0x74,
+ 0x79, 0x2e, 0x64, 0x65, 0x3e, 0x0a, 0x0a, 0x45, 0x64, 0x69, 0x74, 0x6f,
+ 0x72, 0x3a, 0x20, 0x20, 0x20, 0x4a, 0x75, 0x65, 0x72, 0x67, 0x65, 0x6e,
+ 0x20, 0x53, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64,
+ 0x65, 0x72, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x3c, 0x6d, 0x61, 0x69, 0x6c, 0x74, 0x6f, 0x3a, 0x6a, 0x2e,
+ 0x73, 0x63, 0x68, 0x6f, 0x65, 0x6e, 0x77, 0x61, 0x65, 0x6c, 0x64, 0x65,
+ 0x72, 0x40, 0x6a, 0x61, 0x63, 0x6f, 0x62, 0x73, 0x2d, 0x75, 0x6e, 0x69,
+ 0x76, 0x65, 0x72, 0x73, 0x69, 0x74, 0x79, 0x2e, 0x64, 0x65, 0x3e, 0x22,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x20, 0x61,
+ 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x79,
+ 0x20, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x20, 0x64, 0x65, 0x72, 0x69,
+ 0x76, 0x65, 0x64, 0x0a, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x64, 0x61, 0x74,
+ 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x0a, 0x0a, 0x43, 0x6f,
+ 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20,
+ 0x32, 0x30, 0x31, 0x33, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x54, 0x72,
+ 0x75, 0x73, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x73, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x61, 0x73, 0x0a, 0x61, 0x75,
+ 0x74, 0x68, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x20, 0x20, 0x41, 0x6c, 0x6c, 0x20,
+ 0x72, 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x52, 0x65, 0x64, 0x69, 0x73, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x75, 0x73, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x6e, 0x61, 0x72,
+ 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2c, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x6f, 0x72, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74,
+ 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x69, 0x73, 0x20, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74,
+ 0x74, 0x65, 0x64, 0x20, 0x70, 0x75, 0x72, 0x73, 0x75, 0x61, 0x6e, 0x74,
+ 0x20, 0x74, 0x6f, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x75, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x74, 0x65, 0x72, 0x6d,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x69, 0x6e, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x69, 0x6d, 0x70,
+ 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x42, 0x53, 0x44, 0x20, 0x4c,
+ 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x0a, 0x73, 0x65, 0x74, 0x20, 0x66,
+ 0x6f, 0x72, 0x74, 0x68, 0x20, 0x69, 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x34, 0x2e, 0x63, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x49, 0x45, 0x54, 0x46, 0x20, 0x54, 0x72, 0x75, 0x73,
+ 0x74, 0x27, 0x73, 0x20, 0x4c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x50, 0x72,
+ 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x52, 0x65, 0x6c,
+ 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x49, 0x45, 0x54,
+ 0x46, 0x20, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x0a,
+ 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x74, 0x72, 0x75, 0x73,
+ 0x74, 0x65, 0x65, 0x2e, 0x69, 0x65, 0x74, 0x66, 0x2e, 0x6f, 0x72, 0x67,
+ 0x2f, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2d, 0x69, 0x6e, 0x66,
+ 0x6f, 0x29, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66,
+ 0x20, 0x52, 0x46, 0x43, 0x20, 0x36, 0x39, 0x39, 0x31, 0x3b, 0x20, 0x73,
+ 0x65, 0x65, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x52, 0x46, 0x43, 0x20, 0x69,
+ 0x74, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75,
+ 0x6c, 0x6c, 0x20, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x6e, 0x6f, 0x74,
+ 0x69, 0x63, 0x65, 0x73, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x76, 0x69, 0x73,
+ 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x30, 0x37, 0x2d,
+ 0x31, 0x35, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
+ 0x67, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x73, 0x3a, 0x0a, 0x2d, 0x20, 0x79, 0x61, 0x6e, 0x67,
+ 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x0a,
+ 0x2d, 0x20, 0x68, 0x65, 0x78, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x0a, 0x2d, 0x20, 0x75, 0x75, 0x69, 0x64, 0x0a, 0x2d, 0x20, 0x64, 0x6f,
+ 0x74, 0x74, 0x65, 0x64, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x22, 0x3b, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46,
+ 0x43, 0x20, 0x36, 0x39, 0x39, 0x31, 0x3a, 0x20, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x6f, 0x6e, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x44, 0x61, 0x74, 0x61,
+ 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3b, 0x7d, 0x72, 0x65, 0x76,
+ 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30,
+ 0x39, 0x2d, 0x32, 0x34, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
+ 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x49, 0x6e, 0x69, 0x74, 0x69,
+ 0x61, 0x6c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x22, 0x52, 0x46, 0x43, 0x20, 0x36, 0x30, 0x32, 0x31, 0x3a, 0x20, 0x43,
+ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x44,
+ 0x61, 0x74, 0x61, 0x20, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x3b, 0x7d,
+ 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x65, 0x67, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72,
+ 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f,
+ 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72,
+ 0x65, 0x61, 0x73, 0x65, 0x73, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x20,
+ 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, 0x61,
+ 0x0a, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x5e, 0x33, 0x32, 0x2d, 0x31,
+ 0x20, 0x28, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39, 0x35,
+ 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x77,
+ 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x0a, 0x77, 0x72, 0x61, 0x70, 0x73,
+ 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65,
+ 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20,
+ 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0a, 0x0a,
+ 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x68, 0x61, 0x76,
+ 0x65, 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x27, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x27, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68,
+ 0x75, 0x73, 0x2c, 0x20, 0x61, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x68, 0x61, 0x73, 0x20,
+ 0x28, 0x69, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x29,
+ 0x20, 0x6e, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e,
+ 0x20, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75,
+ 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c,
+ 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e,
+ 0x67, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x61,
+ 0x74, 0x20, 0x72, 0x65, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c,
+ 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x0a, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x61, 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74,
+ 0x69, 0x6d, 0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63,
+ 0x69, 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x0a, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x20, 0x20,
+ 0x49, 0x66, 0x20, 0x73, 0x75, 0x63, 0x68, 0x0a, 0x6f, 0x74, 0x68, 0x65,
+ 0x72, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20,
+ 0x6f, 0x63, 0x63, 0x75, 0x72, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65,
+ 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a,
+ 0x61, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x63, 0x6f,
+ 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x61, 0x74, 0x20, 0x74,
+ 0x69, 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x0a, 0x72, 0x65, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x69,
+ 0x61, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x0a, 0x73, 0x68, 0x6f, 0x75,
+ 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61,
+ 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69,
+ 0x63, 0x61, 0x74, 0x65, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73,
+ 0x74, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75,
+ 0x69, 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f,
+ 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64,
+ 0x65, 0x73, 0x2e, 0x20, 0x20, 0x41, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75,
+ 0x6c, 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20, 0x4e, 0x4f, 0x54, 0x20,
+ 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x63,
+ 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77,
+ 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x2e, 0x0a,
+ 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74,
+ 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74,
+ 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x75, 0x6e,
+ 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e,
+ 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a,
+ 0x22, 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37, 0x38, 0x3a, 0x20, 0x53,
+ 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x49,
+ 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x56,
+ 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x53, 0x4d, 0x49,
+ 0x76, 0x32, 0x29, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65,
+ 0x66, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64,
+ 0x2d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x7b,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x63, 0x6f,
+ 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x3b, 0x64, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x20, 0x22, 0x30, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65,
+ 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64, 0x2d,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33,
+ 0x32, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x27,
+ 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x27, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0a, 0x0a, 0x41, 0x20,
+ 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74,
+ 0x20, 0x74, 0x6f, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x28, 0x30, 0x29,
+ 0x20, 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68,
+ 0x65, 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x63,
+ 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f,
+ 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x74, 0x69,
+ 0x6c, 0x20, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x73,
+ 0x0a, 0x61, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x5e, 0x33, 0x32,
+ 0x2d, 0x31, 0x20, 0x28, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32,
+ 0x39, 0x35, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x29, 0x2c,
+ 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x69, 0x74, 0x0a, 0x77, 0x72, 0x61,
+ 0x70, 0x73, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x63,
+ 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x67, 0x61, 0x69,
+ 0x6e, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e,
+ 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74,
+ 0x68, 0x61, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f,
+ 0x76, 0x65, 0x72, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x73,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x0a, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d,
+ 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
+ 0x74, 0x6f, 0x20, 0x77, 0x72, 0x61, 0x70, 0x2c, 0x20, 0x69, 0x74, 0x20,
+ 0x63, 0x61, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a,
+ 0x27, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x27, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x64, 0x65, 0x6c,
+ 0x74, 0x61, 0x2e, 0x20, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+ 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x61, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e,
+ 0x74, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f,
+ 0x20, 0x62, 0x65, 0x20, 0x61, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75,
+ 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x69,
+ 0x6d, 0x65, 0x0a, 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x70,
+ 0x6f, 0x6c, 0x6c, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x20, 0x64, 0x61, 0x74,
+ 0x61, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74,
+ 0x75, 0x61, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x74, 0x6f, 0x6f, 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20,
+ 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6d, 0x69, 0x6e, 0x69,
+ 0x6d, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x49,
+ 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20,
+ 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20,
+ 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74,
+ 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x5a, 0x65, 0x72, 0x6f, 0x42, 0x61,
+ 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x33, 0x32,
+ 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e,
+ 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72,
+ 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46,
+ 0x43, 0x20, 0x34, 0x35, 0x30, 0x32, 0x3a, 0x20, 0x52, 0x65, 0x6d, 0x6f,
+ 0x74, 0x65, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4d,
+ 0x6f, 0x6e, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x4d, 0x61,
+ 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x6e, 0x66,
+ 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x42, 0x61, 0x73, 0x65,
+ 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x22, 0x3b,
+ 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x3b, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65,
+ 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x65, 0x67,
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65,
+ 0x72, 0x0a, 0x74, 0x68, 0x61, 0x74, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74,
+ 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x69, 0x6e, 0x63,
+ 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c,
+ 0x20, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20,
+ 0x61, 0x0a, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x5e, 0x36, 0x34, 0x2d,
+ 0x31, 0x20, 0x28, 0x31, 0x38, 0x34, 0x34, 0x36, 0x37, 0x34, 0x34, 0x30,
+ 0x37, 0x33, 0x37, 0x30, 0x39, 0x35, 0x35, 0x31, 0x36, 0x31, 0x35, 0x20,
+ 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x0a, 0x77, 0x68,
+ 0x65, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x72, 0x61, 0x70, 0x73, 0x20,
+ 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0a, 0x0a, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x20, 0x68, 0x61, 0x76, 0x65,
+ 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x27, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x27, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x75,
+ 0x73, 0x2c, 0x20, 0x61, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x68, 0x61, 0x73, 0x20, 0x28,
+ 0x69, 0x6e, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x29, 0x20,
+ 0x6e, 0x6f, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x20,
+ 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69,
+ 0x74, 0x69, 0x65, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x6c,
+ 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x69, 0x6e, 0x67,
+ 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
+ 0x6c, 0x6c, 0x79, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x20, 0x61, 0x74,
+ 0x20, 0x72, 0x65, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69,
+ 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x0a, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x61, 0x74, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x20, 0x61, 0x73, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20,
+ 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x20, 0x20, 0x49,
+ 0x66, 0x20, 0x73, 0x75, 0x63, 0x68, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72,
+ 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6f,
+ 0x63, 0x63, 0x75, 0x72, 0x2c, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x78,
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63,
+ 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x61,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x61, 0x74, 0x20, 0x74, 0x69,
+ 0x6d, 0x65, 0x73, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20, 0x74, 0x68,
+ 0x61, 0x6e, 0x0a, 0x72, 0x65, 0x2d, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61,
+ 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x6e, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d,
+ 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x0a, 0x73, 0x68, 0x6f, 0x75, 0x6c,
+ 0x64, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70,
+ 0x70, 0x72, 0x6f, 0x70, 0x72, 0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x2c, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x64, 0x69, 0x63,
+ 0x61, 0x74, 0x65, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74,
+ 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x69,
+ 0x74, 0x79, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x63,
+ 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65,
+ 0x73, 0x2e, 0x20, 0x20, 0x41, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20, 0x4e, 0x4f, 0x54, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x0a, 0x63, 0x6f,
+ 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x2e, 0x0a, 0x0a,
+ 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73,
+ 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73,
+ 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a,
+ 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+ 0x65, 0x72, 0x36, 0x34, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22,
+ 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22,
+ 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37, 0x38, 0x3a, 0x20, 0x53, 0x74,
+ 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d,
+ 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x56, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x53, 0x4d, 0x49, 0x76,
+ 0x32, 0x29, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66,
+ 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64, 0x2d,
+ 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x3a, 0x63, 0x6f, 0x75,
+ 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x3b, 0x64, 0x65, 0x66, 0x61, 0x75,
+ 0x6c, 0x74, 0x20, 0x22, 0x30, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20,
+ 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x62, 0x61, 0x73, 0x65, 0x64, 0x2d, 0x63,
+ 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x61, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34,
+ 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a, 0x68, 0x61, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x27, 0x69,
+ 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x27, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0a, 0x0a, 0x41, 0x20, 0x73,
+ 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20,
+ 0x74, 0x6f, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x28, 0x30, 0x29, 0x20,
+ 0x6f, 0x6e, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+ 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x74, 0x68, 0x65,
+ 0x72, 0x65, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x69, 0x6e, 0x63, 0x72,
+ 0x65, 0x61, 0x73, 0x65, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x74, 0x6f, 0x6e,
+ 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x75, 0x6e, 0x74, 0x69, 0x6c,
+ 0x20, 0x69, 0x74, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x0a,
+ 0x61, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x5e, 0x36, 0x34, 0x2d,
+ 0x31, 0x20, 0x28, 0x31, 0x38, 0x34, 0x34, 0x36, 0x37, 0x34, 0x34, 0x30,
+ 0x37, 0x33, 0x37, 0x30, 0x39, 0x35, 0x35, 0x31, 0x36, 0x31, 0x35, 0x20,
+ 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x0a, 0x77, 0x68,
+ 0x65, 0x6e, 0x20, 0x69, 0x74, 0x20, 0x77, 0x72, 0x61, 0x70, 0x73, 0x20,
+ 0x61, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73,
+ 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61,
+ 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x67, 0x61, 0x69, 0x6e, 0x20, 0x66,
+ 0x72, 0x6f, 0x6d, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0a, 0x0a, 0x50,
+ 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74,
+ 0x20, 0x61, 0x6e, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72,
+ 0x73, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x0a, 0x6f, 0x66, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x69,
+ 0x6d, 0x75, 0x6d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x6f, 0x20,
+ 0x77, 0x72, 0x61, 0x70, 0x2c, 0x20, 0x69, 0x74, 0x20, 0x63, 0x61, 0x6e,
+ 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x27, 0x69, 0x6e,
+ 0x69, 0x74, 0x69, 0x61, 0x6c, 0x27, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x2e,
+ 0x20, 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6d, 0x70, 0x6f,
+ 0x72, 0x74, 0x61, 0x6e, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+ 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0a, 0x73,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
+ 0x20, 0x61, 0x77, 0x61, 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x74,
+ 0x69, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x0a,
+ 0x62, 0x65, 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x70, 0x6f, 0x6c, 0x6c,
+ 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x64, 0x69,
+ 0x73, 0x63, 0x61, 0x72, 0x64, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x69,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c,
+ 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x6f, 0x6f,
+ 0x0a, 0x6c, 0x6f, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65,
+ 0x72, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x64, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d,
+ 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d,
+ 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75,
+ 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x5a, 0x65, 0x72, 0x6f, 0x42, 0x61, 0x73, 0x65, 0x64,
+ 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x36, 0x34, 0x20, 0x74, 0x65,
+ 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x32,
+ 0x38, 0x35, 0x36, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c,
+ 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x20, 0x48, 0x69, 0x67, 0x68, 0x20, 0x43, 0x61, 0x70,
+ 0x61, 0x63, 0x69, 0x74, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x54, 0x79,
+ 0x70, 0x65, 0x73, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65,
+ 0x66, 0x20, 0x67, 0x61, 0x75, 0x67, 0x65, 0x33, 0x32, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x3b, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x67, 0x61, 0x75, 0x67, 0x65, 0x33, 0x32, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x65,
+ 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67,
+ 0x65, 0x72, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x0a, 0x6d, 0x61,
+ 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f,
+ 0x72, 0x20, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20,
+ 0x62, 0x75, 0x74, 0x20, 0x73, 0x68, 0x61, 0x6c, 0x6c, 0x20, 0x6e, 0x65,
+ 0x76, 0x65, 0x72, 0x20, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x20, 0x61,
+ 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x0a, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x66, 0x61, 0x6c, 0x6c,
+ 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x6e,
+ 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x20,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x0a, 0x63, 0x61, 0x6e, 0x6e, 0x6f,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72,
+ 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x32, 0x5e, 0x33, 0x32, 0x2d, 0x31,
+ 0x20, 0x28, 0x34, 0x32, 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39, 0x35,
+ 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d,
+ 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x61, 0x6e,
+ 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x30, 0x2e, 0x20, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66,
+ 0x0a, 0x61, 0x20, 0x67, 0x61, 0x75, 0x67, 0x65, 0x33, 0x32, 0x20, 0x68,
+ 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d,
+ 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x68, 0x65,
+ 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x62, 0x65,
+ 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x64, 0x20,
+ 0x69, 0x73, 0x20, 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c,
+ 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x69,
+ 0x6d, 0x75, 0x6d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x68, 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6d,
+ 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x77, 0x68, 0x65, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c,
+ 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65,
+ 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20,
+ 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x2e, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65,
+ 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x64, 0x20,
+ 0x73, 0x75, 0x62, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79,
+ 0x20, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x0a, 0x62,
+ 0x65, 0x6c, 0x6f, 0x77, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61,
+ 0x73, 0x65, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x29, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x28,
+ 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x29, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x67, 0x61, 0x75, 0x67,
+ 0x65, 0x33, 0x32, 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x64, 0x65, 0x63,
+ 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72,
+ 0x65, 0x61, 0x73, 0x65, 0x73, 0x29, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65,
+ 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65,
+ 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71,
+ 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x47, 0x61, 0x75, 0x67, 0x65, 0x33, 0x32, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65,
+ 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x32,
+ 0x35, 0x37, 0x38, 0x3a, 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75,
+ 0x72, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65,
+ 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x32, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x28, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x29, 0x22, 0x3b, 0x7d,
+ 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x67, 0x61, 0x75, 0x67,
+ 0x65, 0x36, 0x34, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x69,
+ 0x6e, 0x74, 0x36, 0x34, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x67, 0x61,
+ 0x75, 0x67, 0x65, 0x36, 0x34, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72,
+ 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20,
+ 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x20, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x2c, 0x20, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x0a, 0x6d, 0x61, 0x79, 0x20, 0x69, 0x6e, 0x63, 0x72,
+ 0x65, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x63, 0x72,
+ 0x65, 0x61, 0x73, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x73, 0x68,
+ 0x61, 0x6c, 0x6c, 0x20, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x65, 0x78,
+ 0x63, 0x65, 0x65, 0x64, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d,
+ 0x75, 0x6d, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x6e, 0x6f,
+ 0x72, 0x20, 0x66, 0x61, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77,
+ 0x20, 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x6d,
+ 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x0a, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x67,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20,
+ 0x32, 0x5e, 0x36, 0x34, 0x2d, 0x31, 0x20, 0x28, 0x31, 0x38, 0x34, 0x34,
+ 0x36, 0x37, 0x34, 0x34, 0x30, 0x37, 0x33, 0x37, 0x30, 0x39, 0x35, 0x35,
+ 0x31, 0x36, 0x31, 0x35, 0x29, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x0a, 0x74,
+ 0x68, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x30, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6f, 0x66, 0x0a, 0x61, 0x20, 0x67,
+ 0x61, 0x75, 0x67, 0x65, 0x36, 0x34, 0x20, 0x68, 0x61, 0x73, 0x20, 0x69,
+ 0x74, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x65, 0x76, 0x65,
+ 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x69, 0x73, 0x20, 0x67,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20,
+ 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20,
+ 0x69, 0x74, 0x73, 0x20, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x0a,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x68,
+ 0x61, 0x73, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6d, 0x69, 0x6e, 0x69, 0x6d,
+ 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x68, 0x65,
+ 0x6e, 0x65, 0x76, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x62, 0x65,
+ 0x69, 0x6e, 0x67, 0x20, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x64, 0x20,
+ 0x69, 0x73, 0x20, 0x73, 0x6d, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x20, 0x74,
+ 0x68, 0x61, 0x6e, 0x20, 0x6f, 0x72, 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c,
+ 0x20, 0x74, 0x6f, 0x20, 0x69, 0x74, 0x73, 0x20, 0x6d, 0x69, 0x6e, 0x69,
+ 0x6d, 0x75, 0x6d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x0a, 0x49,
+ 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x64, 0x20, 0x73, 0x75, 0x62, 0x73,
+ 0x65, 0x71, 0x75, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x64, 0x65, 0x63,
+ 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x0a, 0x62, 0x65, 0x6c, 0x6f, 0x77,
+ 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x73, 0x20,
+ 0x61, 0x62, 0x6f, 0x76, 0x65, 0x29, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6d,
+ 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x28, 0x6d, 0x69, 0x6e, 0x69,
+ 0x6d, 0x75, 0x6d, 0x29, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2c, 0x20,
+ 0x74, 0x68, 0x65, 0x0a, 0x67, 0x61, 0x75, 0x67, 0x65, 0x36, 0x34, 0x20,
+ 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73,
+ 0x65, 0x73, 0x20, 0x28, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65,
+ 0x73, 0x29, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74,
+ 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61,
+ 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x61, 0x73, 0x65, 0x64,
+ 0x47, 0x61, 0x75, 0x67, 0x65, 0x36, 0x34, 0x20, 0x53, 0x4d, 0x49, 0x76,
+ 0x32, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f,
+ 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x64, 0x0a, 0x69, 0x6e, 0x20, 0x52, 0x46, 0x43, 0x20,
+ 0x32, 0x38, 0x35, 0x36, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x32, 0x38, 0x35,
+ 0x36, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43,
+ 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61,
+ 0x6c, 0x20, 0x48, 0x69, 0x67, 0x68, 0x20, 0x43, 0x61, 0x70, 0x61, 0x63,
+ 0x69, 0x74, 0x79, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x54, 0x79, 0x70, 0x65,
+ 0x73, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74,
+ 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x28, 0x5b, 0x30, 0x2d, 0x31, 0x5d,
+ 0x28, 0x5c, 0x2e, 0x5b, 0x31, 0x2d, 0x33, 0x5d, 0x3f, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x29, 0x29, 0x7c, 0x28, 0x32, 0x5c, 0x2e, 0x28, 0x30, 0x7c,
+ 0x28, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x5c, 0x64, 0x2a, 0x29, 0x29, 0x29,
+ 0x29, 0x28, 0x5c, 0x2e, 0x28, 0x30, 0x7c, 0x28, 0x5b, 0x31, 0x2d, 0x39,
+ 0x5d, 0x5c, 0x64, 0x2a, 0x29, 0x29, 0x29, 0x2a, 0x27, 0x3b, 0x7d, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22,
+ 0x54, 0x68, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x69,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x73, 0x20, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x69, 0x73, 0x74, 0x72, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x6c, 0x79, 0x0a, 0x61, 0x73, 0x73, 0x69, 0x67,
+ 0x6e, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x69, 0x6e,
+ 0x20, 0x61, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x2d, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68,
+ 0x69, 0x63, 0x61, 0x6c, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x74, 0x72,
+ 0x65, 0x65, 0x2e, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x61, 0x72, 0x65, 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x74, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e,
+ 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69,
+ 0x63, 0x61, 0x6c, 0x0a, 0x6e, 0x6f, 0x6e, 0x2d, 0x6e, 0x65, 0x67, 0x61,
+ 0x74, 0x69, 0x76, 0x65, 0x20, 0x73, 0x75, 0x62, 0x2d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x2e, 0x20, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x75,
+ 0x62, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20,
+ 0x4e, 0x4f, 0x54, 0x20, 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x20, 0x32,
+ 0x5e, 0x33, 0x32, 0x2d, 0x31, 0x20, 0x28, 0x34, 0x32, 0x39, 0x34, 0x39,
+ 0x36, 0x37, 0x32, 0x39, 0x35, 0x29, 0x2e, 0x20, 0x20, 0x53, 0x75, 0x62,
+ 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
+ 0x0a, 0x61, 0x72, 0x65, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74,
+ 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65,
+ 0x20, 0x64, 0x6f, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69,
+ 0x74, 0x68, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x69, 0x6e,
+ 0x74, 0x65, 0x72, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x0a, 0x77,
+ 0x68, 0x69, 0x74, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x0a, 0x0a,
+ 0x54, 0x68, 0x65, 0x20, 0x41, 0x53, 0x4e, 0x2e, 0x31, 0x20, 0x73, 0x74,
+ 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72,
+ 0x69, 0x63, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x0a, 0x73, 0x75,
+ 0x62, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72,
+ 0x20, 0x74, 0x6f, 0x20, 0x30, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x6f, 0x72,
+ 0x20, 0x32, 0x2e, 0x20, 0x20, 0x46, 0x75, 0x72, 0x74, 0x68, 0x65, 0x72,
+ 0x6d, 0x6f, 0x72, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x0a, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20,
+ 0x73, 0x75, 0x62, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69,
+ 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x72, 0x61, 0x6e, 0x67, 0x65, 0x0a, 0x30, 0x20, 0x74, 0x6f, 0x20, 0x33,
+ 0x39, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72,
+ 0x73, 0x74, 0x20, 0x73, 0x75, 0x62, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x69, 0x73, 0x20, 0x30, 0x20, 0x6f,
+ 0x72, 0x20, 0x31, 0x2e, 0x20, 0x20, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x6c,
+ 0x79, 0x2c, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x41, 0x53, 0x4e, 0x2e, 0x31,
+ 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x72, 0x65,
+ 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20,
+ 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x64,
+ 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x0a, 0x68, 0x61, 0x73,
+ 0x20, 0x61, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x20, 0x61, 0x74, 0x20, 0x6c,
+ 0x65, 0x61, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x73, 0x75, 0x62,
+ 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73,
+ 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61, 0x74, 0x74, 0x65,
+ 0x72, 0x6e, 0x0a, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x73, 0x20,
+ 0x74, 0x68, 0x65, 0x73, 0x65, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72, 0x69,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x0a, 0x0a, 0x41, 0x6c, 0x74,
+ 0x68, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x75,
+ 0x6d, 0x62, 0x65, 0x72, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x75, 0x62, 0x2d,
+ 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20,
+ 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x65, 0x64, 0x2c, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x64,
+ 0x65, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x73, 0x68, 0x6f,
+ 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 0x6d,
+ 0x61, 0x79, 0x20, 0x62, 0x65, 0x0a, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d,
+ 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x73, 0x74, 0x69, 0x63, 0x6b, 0x20, 0x77, 0x69, 0x74,
+ 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x20,
+ 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x31, 0x32, 0x38,
+ 0x0a, 0x73, 0x75, 0x62, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69, 0x73, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x73, 0x75,
+ 0x70, 0x65, 0x72, 0x73, 0x65, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x20, 0x4f, 0x42, 0x4a, 0x45,
+ 0x43, 0x54, 0x20, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45,
+ 0x52, 0x20, 0x74, 0x79, 0x70, 0x65, 0x0a, 0x73, 0x69, 0x6e, 0x63, 0x65,
+ 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72,
+ 0x65, 0x73, 0x74, 0x72, 0x69, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x31, 0x32, 0x38, 0x20, 0x73, 0x75, 0x62, 0x2d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x48,
+ 0x65, 0x6e, 0x63, 0x65, 0x2c, 0x0a, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20, 0x4e,
+ 0x4f, 0x54, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x20, 0x4f, 0x42,
+ 0x4a, 0x45, 0x43, 0x54, 0x0a, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46,
+ 0x49, 0x45, 0x52, 0x20, 0x74, 0x79, 0x70, 0x65, 0x3b, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2d, 0x31, 0x32, 0x38, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x53, 0x48, 0x4f, 0x55, 0x4c, 0x44, 0x20,
+ 0x62, 0x65, 0x0a, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x73, 0x74,
+ 0x65, 0x61, 0x64, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x49, 0x53, 0x4f, 0x39, 0x38, 0x33, 0x34,
+ 0x2d, 0x31, 0x3a, 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x74, 0x65, 0x63, 0x68, 0x6e, 0x6f, 0x6c, 0x6f,
+ 0x67, 0x79, 0x20, 0x2d, 0x2d, 0x20, 0x4f, 0x70, 0x65, 0x6e, 0x20, 0x53,
+ 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x0a, 0x49, 0x6e, 0x74, 0x65, 0x72,
+ 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d,
+ 0x2d, 0x20, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x73,
+ 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x70, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x4f, 0x53,
+ 0x49, 0x0a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69,
+ 0x65, 0x73, 0x3a, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x20,
+ 0x70, 0x72, 0x6f, 0x63, 0x65, 0x64, 0x75, 0x72, 0x65, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x74, 0x6f, 0x70, 0x0a, 0x61, 0x72, 0x63, 0x73, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x53, 0x4e, 0x2e, 0x31,
+ 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x49, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x74, 0x72, 0x65, 0x65, 0x22,
+ 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x6f, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x2d, 0x31, 0x32, 0x38, 0x20, 0x7b, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x7b, 0x70, 0x61, 0x74,
+ 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5c, 0x64, 0x2a, 0x28, 0x5c, 0x2e,
+ 0x5c, 0x64, 0x2a, 0x29, 0x7b, 0x31, 0x2c, 0x31, 0x32, 0x37, 0x7d, 0x27,
+ 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20,
+ 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x20, 0x72, 0x65, 0x73, 0x74, 0x72,
+ 0x69, 0x63, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x31, 0x32, 0x38,
+ 0x0a, 0x73, 0x75, 0x62, 0x2d, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61,
+ 0x6e, 0x74, 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69,
+ 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x20, 0x49, 0x44, 0x45,
+ 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76,
+ 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37, 0x38, 0x3a,
+ 0x20, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f,
+ 0x66, 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+ 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x0a, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x53,
+ 0x4d, 0x49, 0x76, 0x32, 0x29, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65,
+ 0x64, 0x65, 0x66, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x2d, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x20, 0x7b, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x6c, 0x65,
+ 0x6e, 0x67, 0x74, 0x68, 0x20, 0x22, 0x31, 0x2e, 0x2e, 0x6d, 0x61, 0x78,
+ 0x22, 0x3b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5b,
+ 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x5f, 0x5d, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x2d, 0x5f, 0x2e, 0x5d, 0x2a,
+ 0x27, 0x3b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x2e,
+ 0x7c, 0x2e, 0x2e, 0x7c, 0x5b, 0x5e, 0x78, 0x58, 0x5d, 0x2e, 0x2a, 0x7c,
+ 0x2e, 0x5b, 0x5e, 0x6d, 0x4d, 0x5d, 0x2e, 0x2a, 0x7c, 0x2e, 0x2e, 0x5b,
+ 0x5e, 0x6c, 0x4c, 0x5d, 0x2e, 0x2a, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20,
+ 0x59, 0x41, 0x4e, 0x47, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
+ 0x69, 0x65, 0x72, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x61,
+ 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x27, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x27, 0x0a, 0x72, 0x75, 0x6c, 0x65, 0x20, 0x69,
+ 0x6e, 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x32,
+ 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x36, 0x30, 0x32, 0x30,
+ 0x2e, 0x20, 0x20, 0x41, 0x6e, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0a, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20,
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x20, 0x63,
+ 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20,
+ 0x61, 0x6e, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72,
+ 0x65, 0x0a, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62,
+ 0x79, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x72, 0x62, 0x69, 0x74, 0x72, 0x61,
+ 0x72, 0x79, 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69,
+ 0x63, 0x20, 0x6f, 0x72, 0x0a, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c,
+ 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73,
+ 0x2c, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x6f,
+ 0x72, 0x20, 0x64, 0x6f, 0x74, 0x73, 0x2e, 0x0a, 0x0a, 0x41, 0x20, 0x59,
+ 0x41, 0x4e, 0x47, 0x20, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x4e, 0x4f, 0x54, 0x20,
+ 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61,
+ 0x6e, 0x79, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x0a,
+ 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72,
+ 0x63, 0x61, 0x73, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x70, 0x70, 0x65,
+ 0x72, 0x63, 0x61, 0x73, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63,
+ 0x74, 0x65, 0x72, 0x0a, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x27, 0x78, 0x6d, 0x6c, 0x27, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20,
+ 0x36, 0x30, 0x32, 0x30, 0x3a, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x2d,
+ 0x20, 0x41, 0x20, 0x44, 0x61, 0x74, 0x61, 0x20, 0x4d, 0x6f, 0x64, 0x65,
+ 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67,
+ 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65,
+ 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f,
+ 0x63, 0x6f, 0x6c, 0x20, 0x28, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46,
+ 0x29, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20,
+ 0x64, 0x61, 0x74, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69, 0x6d,
+ 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20,
+ 0x27, 0x5c, 0x64, 0x7b, 0x34, 0x7d, 0x2d, 0x5c, 0x64, 0x7b, 0x32, 0x7d,
+ 0x2d, 0x5c, 0x64, 0x7b, 0x32, 0x7d, 0x54, 0x5c, 0x64, 0x7b, 0x32, 0x7d,
+ 0x3a, 0x5c, 0x64, 0x7b, 0x32, 0x7d, 0x3a, 0x5c, 0x64, 0x7b, 0x32, 0x7d,
+ 0x28, 0x5c, 0x2e, 0x5c, 0x64, 0x2b, 0x29, 0x3f, 0x28, 0x5a, 0x7c, 0x5b,
+ 0x5c, 0x2b, 0x5c, 0x2d, 0x5d, 0x5c, 0x64, 0x7b, 0x32, 0x7d, 0x3a, 0x5c,
+ 0x64, 0x7b, 0x32, 0x7d, 0x29, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63,
+ 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x65,
+ 0x20, 0x64, 0x61, 0x74, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69,
+ 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x61,
+ 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x49, 0x53, 0x4f, 0x20, 0x38, 0x36, 0x30, 0x31,
+ 0x0a, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x64, 0x61, 0x74, 0x65,
+ 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20,
+ 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x47, 0x72,
+ 0x65, 0x67, 0x6f, 0x72, 0x69, 0x61, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x65,
+ 0x6e, 0x64, 0x61, 0x72, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x70,
+ 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
+ 0x0a, 0x64, 0x61, 0x74, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x70,
+ 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x6e,
+ 0x20, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x35, 0x2e, 0x36,
+ 0x20, 0x6f, 0x66, 0x20, 0x52, 0x46, 0x43, 0x20, 0x33, 0x33, 0x33, 0x39,
+ 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x65, 0x2d,
+ 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69,
+ 0x62, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x58, 0x4d,
+ 0x4c, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x6e, 0x6f, 0x74,
+ 0x61, 0x62, 0x6c, 0x65, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x0a, 0x28, 0x61, 0x29, 0x20, 0x54, 0x68,
+ 0x65, 0x20, 0x64, 0x61, 0x74, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74,
+ 0x69, 0x6d, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x64, 0x6f, 0x65,
+ 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x20,
+ 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x79, 0x65, 0x61,
+ 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x28, 0x62, 0x29, 0x20, 0x54, 0x68, 0x65,
+ 0x20, 0x64, 0x61, 0x74, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69,
+ 0x6d, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x6f, 0x66, 0x66, 0x73,
+ 0x65, 0x74, 0x20, 0x2d, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x20, 0x69, 0x6e,
+ 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x75,
+ 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x74, 0x69, 0x6d, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x28, 0x73,
+ 0x65, 0x65, 0x20, 0x52, 0x46, 0x43, 0x20, 0x33, 0x33, 0x33, 0x39, 0x29,
+ 0x20, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x2d, 0x30, 0x30, 0x3a, 0x30,
+ 0x30, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x2b, 0x30, 0x30, 0x3a, 0x30, 0x30,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x5a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x61, 0x6c, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 0x74,
+ 0x69, 0x6d, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x6e, 0x20,
+ 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x2e, 0x0a, 0x0a, 0x28,
+ 0x63, 0x29, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e,
+ 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20,
+ 0x28, 0x73, 0x65, 0x65, 0x20, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x29, 0x20,
+ 0x6f, 0x66, 0x20, 0x64, 0x61, 0x74, 0x61, 0x2d, 0x61, 0x6e, 0x64, 0x2d,
+ 0x74, 0x69, 0x6d, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0a,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x73,
+ 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x61,
+ 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72, 0x6d,
+ 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x20,
+ 0x58, 0x4d, 0x4c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x77, 0x68,
+ 0x69, 0x63, 0x68, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73,
+ 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x20, 0x74,
+ 0x6f, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x55, 0x54, 0x43, 0x20,
+ 0x75, 0x73, 0x69, 0x6e, 0x67, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x6f, 0x66, 0x66, 0x73,
+ 0x65, 0x74, 0x20, 0x27, 0x5a, 0x27, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x69,
+ 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e, 0x74,
+ 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x44, 0x61, 0x74, 0x65,
+ 0x41, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x75, 0x61, 0x6c, 0x0a, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d,
+ 0x49, 0x76, 0x32, 0x20, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x20, 0x52, 0x46,
+ 0x43, 0x20, 0x33, 0x33, 0x33, 0x39, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20,
+ 0x61, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x0a,
+ 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x62, 0x65,
+ 0x74, 0x77, 0x65, 0x65, 0x6e, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x2d, 0x64,
+ 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x66, 0x75, 0x6c, 0x6c,
+ 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x70, 0x72,
+ 0x6f, 0x76, 0x69, 0x64, 0x65, 0x73, 0x0a, 0x68, 0x69, 0x67, 0x68, 0x65,
+ 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x73, 0x65, 0x63,
+ 0x66, 0x72, 0x61, 0x63, 0x2e, 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x63,
+ 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x64, 0x61, 0x74, 0x65,
+ 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20,
+ 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x0a, 0x7a,
+ 0x6f, 0x6e, 0x65, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x61, 0x20, 0x6e,
+ 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
+ 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x63,
+ 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x27,
+ 0x73, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64,
+ 0x20, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65,
+ 0x74, 0x20, 0x74, 0x6f, 0x20, 0x55, 0x54, 0x43, 0x20, 0x74, 0x69, 0x6d,
+ 0x65, 0x2e, 0x20, 0x20, 0x41, 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x76, 0x69,
+ 0x63, 0x65, 0x27, 0x73, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20,
+ 0x74, 0x6f, 0x20, 0x55, 0x54, 0x43, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20,
+ 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x20, 0x64,
+ 0x61, 0x74, 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x0a, 0x74, 0x6f, 0x20, 0x63,
+ 0x68, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x61, 0x63, 0x63, 0x6f, 0x72, 0x64,
+ 0x69, 0x6e, 0x67, 0x6c, 0x79, 0x2e, 0x20, 0x20, 0x53, 0x75, 0x63, 0x68,
+ 0x20, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x20, 0x6d, 0x69, 0x67,
+ 0x68, 0x74, 0x20, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x20, 0x70, 0x65,
+ 0x72, 0x69, 0x6f, 0x64, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x79, 0x0a, 0x69,
+ 0x6e, 0x20, 0x63, 0x61, 0x73, 0x65, 0x20, 0x61, 0x20, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x73, 0x20,
+ 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c,
+ 0x79, 0x20, 0x64, 0x61, 0x79, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x73,
+ 0x61, 0x76, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x0a, 0x28,
+ 0x44, 0x53, 0x54, 0x29, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x7a, 0x6f,
+ 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x63, 0x68,
+ 0x61, 0x6e, 0x67, 0x65, 0x73, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20,
+ 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x0a, 0x64, 0x61, 0x74,
+ 0x65, 0x2d, 0x61, 0x6e, 0x64, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61,
+ 0x6e, 0x20, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x74, 0x69,
+ 0x6d, 0x65, 0x20, 0x7a, 0x6f, 0x6e, 0x65, 0x20, 0x28, 0x75, 0x73, 0x75,
+ 0x61, 0x6c, 0x6c, 0x79, 0x0a, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x69,
+ 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6e, 0x6f,
+ 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x6c, 0x6f, 0x63, 0x61,
+ 0x6c, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x29, 0x20, 0x75, 0x73, 0x65, 0x73,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x6f, 0x66,
+ 0x66, 0x73, 0x65, 0x74, 0x0a, 0x2d, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x2e,
+ 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a,
+ 0x22, 0x52, 0x46, 0x43, 0x20, 0x33, 0x33, 0x33, 0x39, 0x3a, 0x20, 0x44,
+ 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x54, 0x69, 0x6d, 0x65,
+ 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x65, 0x74, 0x3a, 0x20, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
+ 0x61, 0x6d, 0x70, 0x73, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37,
+ 0x39, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43,
+ 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x0a, 0x58, 0x53, 0x44,
+ 0x2d, 0x54, 0x59, 0x50, 0x45, 0x53, 0x3a, 0x20, 0x58, 0x4d, 0x4c, 0x20,
+ 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x50, 0x61, 0x72, 0x74, 0x20,
+ 0x32, 0x3a, 0x20, 0x44, 0x61, 0x74, 0x61, 0x74, 0x79, 0x70, 0x65, 0x73,
+ 0x20, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x45, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65,
+ 0x66, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x20,
+ 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32,
+ 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x0a, 0x22, 0x54, 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x69,
+ 0x63, 0x6b, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x20, 0x6e, 0x6f,
+ 0x6e, 0x2d, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x20, 0x69,
+ 0x6e, 0x74, 0x65, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a,
+ 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2c, 0x20, 0x6d, 0x6f, 0x64,
+ 0x75, 0x6c, 0x6f, 0x20, 0x32, 0x5e, 0x33, 0x32, 0x20, 0x28, 0x34, 0x32,
+ 0x39, 0x34, 0x39, 0x36, 0x37, 0x32, 0x39, 0x36, 0x20, 0x64, 0x65, 0x63,
+ 0x69, 0x6d, 0x61, 0x6c, 0x29, 0x2c, 0x20, 0x69, 0x6e, 0x0a, 0x68, 0x75,
+ 0x6e, 0x64, 0x72, 0x65, 0x64, 0x74, 0x68, 0x73, 0x20, 0x6f, 0x66, 0x20,
+ 0x61, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x62, 0x65, 0x74,
+ 0x77, 0x65, 0x65, 0x6e, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x65, 0x70, 0x6f,
+ 0x63, 0x68, 0x73, 0x2e, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x61,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x0a, 0x6e, 0x6f, 0x64, 0x65,
+ 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20,
+ 0x74, 0x68, 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68,
+ 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6f, 0x66, 0x0a, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65,
+ 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x64, 0x65, 0x6e,
+ 0x74, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x66, 0x65, 0x72,
+ 0x65, 0x6e, 0x63, 0x65, 0x20, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x73, 0x2e,
+ 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69,
+ 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x73,
+ 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65, 0x6e,
+ 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x54, 0x69, 0x6d,
+ 0x65, 0x54, 0x69, 0x63, 0x6b, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20,
+ 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32,
+ 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37, 0x38, 0x3a, 0x20,
+ 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x6f, 0x66,
+ 0x20, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20,
+ 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x0a, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x53, 0x4d,
+ 0x49, 0x76, 0x32, 0x29, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64,
+ 0x65, 0x66, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x3a,
+ 0x74, 0x69, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x3b, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54,
+ 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73,
+ 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x73,
+ 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x0a, 0x74, 0x69, 0x6d, 0x65,
+ 0x74, 0x69, 0x63, 0x6b, 0x73, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x61, 0x74, 0x20, 0x77, 0x68, 0x69,
+ 0x63, 0x68, 0x20, 0x61, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x63, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x0a, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x65, 0x64, 0x2e, 0x20, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63,
+ 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69,
+ 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x64,
+ 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f,
+ 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
+ 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
+ 0x64, 0x20, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x20, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x20, 0x20, 0x57, 0x68, 0x65, 0x6e,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69,
+ 0x63, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x20, 0x70, 0x72,
+ 0x69, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c,
+ 0x61, 0x73, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x74, 0x68, 0x65,
+ 0x0a, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20,
+ 0x74, 0x69, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x77, 0x61, 0x73, 0x20,
+ 0x7a, 0x65, 0x72, 0x6f, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x7a, 0x65,
+ 0x72, 0x6f, 0x2e, 0x20, 0x20, 0x4e, 0x6f, 0x74, 0x65, 0x20, 0x74, 0x68,
+ 0x61, 0x74, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75,
+ 0x69, 0x72, 0x65, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x69, 0x6d,
+ 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x0a, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x73, 0x65,
+ 0x74, 0x20, 0x74, 0x6f, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x20, 0x77, 0x68,
+ 0x65, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x6f,
+ 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74,
+ 0x69, 0x63, 0x6b, 0x73, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x73, 0x20, 0x34,
+ 0x39, 0x37, 0x2b, 0x20, 0x64, 0x61, 0x79, 0x73, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x77, 0x72, 0x61, 0x70, 0x73, 0x20, 0x61, 0x72, 0x6f, 0x75, 0x6e,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0a, 0x0a,
+ 0x54, 0x68, 0x65, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74,
+ 0x65, 0x64, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x69, 0x63, 0x6b, 0x73,
+ 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x0a, 0x69, 0x6e, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x75, 0x73, 0x69,
+ 0x6e, 0x67, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63,
+ 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65,
+ 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c, 0x65,
+ 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x54, 0x69,
+ 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x20, 0x74, 0x65, 0x78, 0x74,
+ 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x53, 0x4d,
+ 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37,
+ 0x39, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43,
+ 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66,
+ 0x6f, 0x72, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x22, 0x3b, 0x7d, 0x74,
+ 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x70, 0x68, 0x79, 0x73, 0x2d,
+ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7b, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61,
+ 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x5b, 0x30, 0x2d, 0x39,
+ 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x32, 0x7d, 0x28, 0x3a,
+ 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b,
+ 0x32, 0x7d, 0x29, 0x2a, 0x29, 0x3f, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x52, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6d, 0x65, 0x64,
+ 0x69, 0x61, 0x2d, 0x20, 0x6f, 0x72, 0x20, 0x70, 0x68, 0x79, 0x73, 0x69,
+ 0x63, 0x61, 0x6c, 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x61, 0x64,
+ 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20, 0x72, 0x65, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x0a, 0x61, 0x73, 0x20, 0x61,
+ 0x20, 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x63,
+ 0x74, 0x65, 0x74, 0x73, 0x2c, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x6f,
+ 0x63, 0x74, 0x65, 0x74, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65,
+ 0x6e, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x77, 0x6f, 0x20,
+ 0x68, 0x65, 0x78, 0x61, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x0a,
+ 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x20, 0x4f, 0x63,
+ 0x74, 0x65, 0x74, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x65, 0x70,
+ 0x61, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f,
+ 0x6c, 0x6f, 0x6e, 0x73, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63,
+ 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x0a, 0x72, 0x65, 0x70,
+ 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x75, 0x73, 0x65, 0x73, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61,
+ 0x73, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e, 0x64,
+ 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69,
+ 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61, 0x6c,
+ 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x50,
+ 0x68, 0x79, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65,
+ 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20,
+ 0x32, 0x35, 0x37, 0x39, 0x3a, 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61,
+ 0x6c, 0x20, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x22,
+ 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x6d, 0x61,
+ 0x63, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x7b, 0x74,
+ 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b,
+ 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5b, 0x30, 0x2d,
+ 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x32, 0x7d, 0x28,
+ 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d,
+ 0x7b, 0x32, 0x7d, 0x29, 0x7b, 0x35, 0x7d, 0x27, 0x3b, 0x7d, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54,
+ 0x68, 0x65, 0x20, 0x6d, 0x61, 0x63, 0x2d, 0x61, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x72, 0x65, 0x70, 0x72,
+ 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x45,
+ 0x45, 0x45, 0x20, 0x38, 0x30, 0x32, 0x20, 0x4d, 0x41, 0x43, 0x20, 0x61,
+ 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20,
+ 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65,
+ 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63,
+ 0x61, 0x73, 0x65, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x73, 0x2e, 0x0a, 0x0a, 0x49, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x69, 0x74, 0x73, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74,
+ 0x69, 0x63, 0x73, 0x2c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x69, 0x76, 0x61,
+ 0x6c, 0x65, 0x6e, 0x74, 0x0a, 0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x4d, 0x61, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x74,
+ 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65,
+ 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x49, 0x45, 0x45, 0x45,
+ 0x20, 0x38, 0x30, 0x32, 0x3a, 0x20, 0x49, 0x45, 0x45, 0x45, 0x20, 0x53,
+ 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20,
+ 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4d, 0x65,
+ 0x74, 0x72, 0x6f, 0x70, 0x6f, 0x6c, 0x69, 0x74, 0x61, 0x6e, 0x20, 0x41,
+ 0x72, 0x65, 0x61, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x3a,
+ 0x20, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x20, 0x61, 0x6e,
+ 0x64, 0x20, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75,
+ 0x72, 0x65, 0x0a, 0x52, 0x46, 0x43, 0x20, 0x32, 0x35, 0x37, 0x39, 0x3a,
+ 0x20, 0x54, 0x65, 0x78, 0x74, 0x75, 0x61, 0x6c, 0x20, 0x43, 0x6f, 0x6e,
+ 0x76, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x53, 0x4d, 0x49, 0x76, 0x32, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70,
+ 0x65, 0x64, 0x65, 0x66, 0x20, 0x78, 0x70, 0x61, 0x74, 0x68, 0x31, 0x2e,
+ 0x30, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68, 0x69, 0x73, 0x20, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x73,
+ 0x20, 0x61, 0x6e, 0x20, 0x58, 0x50, 0x41, 0x54, 0x48, 0x20, 0x31, 0x2e,
+ 0x30, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x0a, 0x0a, 0x57, 0x68, 0x65, 0x6e, 0x20, 0x61, 0x20, 0x73, 0x63,
+ 0x68, 0x65, 0x6d, 0x61, 0x20, 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73,
+ 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61,
+ 0x74, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20,
+ 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x64, 0x65,
+ 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6f, 0x66,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20,
+ 0x6e, 0x6f, 0x64, 0x65, 0x20, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x73, 0x70,
+ 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x58, 0x50,
+ 0x61, 0x74, 0x68, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x20,
+ 0x69, 0x6e, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x58, 0x50, 0x61, 0x74, 0x68, 0x20, 0x65, 0x78, 0x70, 0x72, 0x65,
+ 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x65, 0x76, 0x61,
+ 0x6c, 0x75, 0x61, 0x74, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x58, 0x50, 0x41, 0x54,
+ 0x48, 0x3a, 0x20, 0x58, 0x4d, 0x4c, 0x20, 0x50, 0x61, 0x74, 0x68, 0x20,
+ 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x28, 0x58, 0x50,
+ 0x61, 0x74, 0x68, 0x29, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+ 0x20, 0x31, 0x2e, 0x30, 0x22, 0x3b, 0x7d, 0x74, 0x79, 0x70, 0x65, 0x64,
+ 0x65, 0x66, 0x20, 0x68, 0x65, 0x78, 0x2d, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20,
+ 0x27, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,
+ 0x5d, 0x7b, 0x32, 0x7d, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d,
+ 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x32, 0x7d, 0x29, 0x2a, 0x29, 0x3f,
+ 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
+ 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x68, 0x65, 0x78, 0x61, 0x64, 0x65,
+ 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73,
+ 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x65, 0x64,
+ 0x20, 0x61, 0x73, 0x20, 0x68, 0x65, 0x78, 0x20, 0x64, 0x69, 0x67, 0x69,
+ 0x74, 0x73, 0x0a, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65, 0x64,
+ 0x20, 0x62, 0x79, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x73, 0x2e, 0x20,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63,
+ 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x73, 0x0a, 0x6c,
+ 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x22, 0x3b, 0x7d, 0x74,
+ 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x75, 0x75, 0x69, 0x64, 0x20,
+ 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
+ 0x20, 0x7b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x5b,
+ 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38,
+ 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,
+ 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66,
+ 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b,
+ 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31,
+ 0x32, 0x7d, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x20, 0x55, 0x6e, 0x69, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x55, 0x6e, 0x69, 0x71,
+ 0x75, 0x65, 0x20, 0x49, 0x44, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x74, 0x72,
+ 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e,
+ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x46, 0x43, 0x20, 0x34, 0x31,
+ 0x32, 0x32, 0x2e, 0x20, 0x20, 0x54, 0x68, 0x65, 0x20, 0x63, 0x61, 0x6e,
+ 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65,
+ 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x75, 0x73,
+ 0x65, 0x73, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x63, 0x61, 0x73, 0x65,
+ 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e,
+ 0x0a, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77,
+ 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
+ 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x55,
+ 0x55, 0x49, 0x44, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e,
+ 0x67, 0x20, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0a, 0x66, 0x38, 0x31, 0x64, 0x34, 0x66,
+ 0x61, 0x65, 0x2d, 0x37, 0x64, 0x65, 0x63, 0x2d, 0x31, 0x31, 0x64, 0x30,
+ 0x2d, 0x61, 0x37, 0x36, 0x35, 0x2d, 0x30, 0x30, 0x61, 0x30, 0x63, 0x39,
+ 0x31, 0x65, 0x36, 0x62, 0x66, 0x36, 0x0a, 0x22, 0x3b, 0x72, 0x65, 0x66,
+ 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20,
+ 0x34, 0x31, 0x32, 0x32, 0x3a, 0x20, 0x41, 0x20, 0x55, 0x6e, 0x69, 0x76,
+ 0x65, 0x72, 0x73, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x55, 0x6e, 0x69, 0x71,
+ 0x75, 0x65, 0x20, 0x49, 0x44, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
+ 0x72, 0x20, 0x28, 0x55, 0x55, 0x49, 0x44, 0x29, 0x20, 0x55, 0x52, 0x4e,
+ 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x3b, 0x7d,
+ 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66, 0x20, 0x64, 0x6f, 0x74, 0x74,
+ 0x65, 0x64, 0x2d, 0x71, 0x75, 0x61, 0x64, 0x20, 0x7b, 0x74, 0x79, 0x70,
+ 0x65, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x7b, 0x70, 0x61,
+ 0x74, 0x74, 0x65, 0x72, 0x6e, 0x20, 0x27, 0x28, 0x28, 0x5b, 0x30, 0x2d,
+ 0x39, 0x5d, 0x7c, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x7c, 0x31, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x7c, 0x32, 0x5b, 0x30, 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x5d, 0x7c, 0x32, 0x35, 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x29, 0x5c, 0x2e,
+ 0x29, 0x7b, 0x33, 0x7d, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x5b,
+ 0x31, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x31, 0x5b,
+ 0x30, 0x2d, 0x39, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x32, 0x5b,
+ 0x30, 0x2d, 0x34, 0x5d, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7c, 0x32, 0x35,
+ 0x5b, 0x30, 0x2d, 0x35, 0x5d, 0x29, 0x27, 0x3b, 0x7d, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x6e,
+ 0x20, 0x75, 0x6e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x33, 0x32,
+ 0x2d, 0x62, 0x69, 0x74, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20,
+ 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x6f, 0x74, 0x74, 0x65, 0x64, 0x2d,
+ 0x71, 0x75, 0x61, 0x64, 0x0a, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x69, 0x2e, 0x65, 0x2e, 0x2c, 0x20, 0x66, 0x6f, 0x75,
+ 0x72, 0x20, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x20, 0x77, 0x72, 0x69,
+ 0x74, 0x74, 0x65, 0x6e, 0x20, 0x61, 0x73, 0x20, 0x64, 0x65, 0x63, 0x69,
+ 0x6d, 0x61, 0x6c, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x0a,
+ 0x61, 0x6e, 0x64, 0x20, 0x73, 0x65, 0x70, 0x61, 0x72, 0x61, 0x74, 0x65,
+ 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x20, 0x27,
+ 0x2e, 0x27, 0x20, 0x28, 0x66, 0x75, 0x6c, 0x6c, 0x20, 0x73, 0x74, 0x6f,
+ 0x70, 0x29, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x2e, 0x22, 0x3b, 0x7d, 0x7d, 0x00
+};
diff --git a/models/ietf-yang-types@2013-07-15.yang b/models/ietf-yang-types@2013-07-15.yang
new file mode 100644
index 0000000..ee58fa3
--- /dev/null
+++ b/models/ietf-yang-types@2013-07-15.yang
@@ -0,0 +1,474 @@
+module ietf-yang-types {
+
+ namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types";
+ prefix "yang";
+
+ organization
+ "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+ contact
+ "WG Web: <http://tools.ietf.org/wg/netmod/>
+ WG List: <mailto:netmod@ietf.org>
+
+ WG Chair: David Kessens
+ <mailto:david.kessens@nsn.com>
+
+ WG Chair: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>
+
+ Editor: Juergen Schoenwaelder
+ <mailto:j.schoenwaelder@jacobs-university.de>";
+
+ description
+ "This module contains a collection of generally useful derived
+ YANG data types.
+
+ Copyright (c) 2013 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject
+ to the license terms contained in, the Simplified BSD License
+ set forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 6991; see
+ the RFC itself for full legal notices.";
+
+ revision 2013-07-15 {
+ description
+ "This revision adds the following new data types:
+ - yang-identifier
+ - hex-string
+ - uuid
+ - dotted-quad";
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+
+ revision 2010-09-24 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 6021: Common YANG Data Types";
+ }
+
+ /*** collection of counter and gauge types ***/
+
+ typedef counter32 {
+ type uint32;
+ description
+ "The counter32 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the creation of
+ a schema node of type counter32 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+
+ The counter32 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter32.
+
+ In the value set and its semantics, this type is equivalent
+ to the Counter32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef zero-based-counter32 {
+ type yang:counter32;
+ default "0";
+ description
+ "The zero-based-counter32 type represents a counter32
+ that has the defined 'initial' value zero.
+
+ A schema node of this type will be set to zero (0) on creation
+ and will thereafter increase monotonically until it reaches
+ a maximum value of 2^32-1 (4294967295 decimal), when it
+ wraps around and starts increasing again from zero.
+
+ Provided that an application discovers a new schema node
+ of this type within the minimum time to wrap, it can use the
+ 'initial' value as a delta. It is important for a management
+ station to be aware of this minimum time and the actual time
+ between polls, and to discard data if the actual time is too
+ long or there is no defined minimum time.
+
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter32 textual convention of the SMIv2.";
+ reference
+ "RFC 4502: Remote Network Monitoring Management Information
+ Base Version 2";
+ }
+
+ typedef counter64 {
+ type uint64;
+ description
+ "The counter64 type represents a non-negative integer
+ that monotonically increases until it reaches a
+ maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+
+ Counters have no defined 'initial' value, and thus, a
+ single value of a counter has (in general) no information
+ content. Discontinuities in the monotonically increasing
+ value normally occur at re-initialization of the
+ management system, and at other times as specified in the
+ description of a schema node using this type. If such
+ other times can occur, for example, the creation of
+ a schema node of type counter64 at times other than
+ re-initialization, then a corresponding schema node
+ should be defined, with an appropriate type, to indicate
+ the last discontinuity.
+
+ The counter64 type should not be used for configuration
+ schema nodes. A default statement SHOULD NOT be used in
+ combination with the type counter64.
+
+ In the value set and its semantics, this type is equivalent
+ to the Counter64 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef zero-based-counter64 {
+ type yang:counter64;
+ default "0";
+ description
+ "The zero-based-counter64 type represents a counter64 that
+ has the defined 'initial' value zero.
+
+ A schema node of this type will be set to zero (0) on creation
+ and will thereafter increase monotonically until it reaches
+ a maximum value of 2^64-1 (18446744073709551615 decimal),
+ when it wraps around and starts increasing again from zero.
+
+ Provided that an application discovers a new schema node
+ of this type within the minimum time to wrap, it can use the
+ 'initial' value as a delta. It is important for a management
+ station to be aware of this minimum time and the actual time
+ between polls, and to discard data if the actual time is too
+ long or there is no defined minimum time.
+
+ In the value set and its semantics, this type is equivalent
+ to the ZeroBasedCounter64 textual convention of the SMIv2.";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+ }
+
+ typedef gauge32 {
+ type uint32;
+ description
+ "The gauge32 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^32-1 (4294967295 decimal), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge32 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge32 also decreases (increases).
+
+ In the value set and its semantics, this type is equivalent
+ to the Gauge32 type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef gauge64 {
+ type uint64;
+ description
+ "The gauge64 type represents a non-negative integer, which
+ may increase or decrease, but shall never exceed a maximum
+ value, nor fall below a minimum value. The maximum value
+ cannot be greater than 2^64-1 (18446744073709551615), and
+ the minimum value cannot be smaller than 0. The value of
+ a gauge64 has its maximum value whenever the information
+ being modeled is greater than or equal to its maximum
+ value, and has its minimum value whenever the information
+ being modeled is smaller than or equal to its minimum value.
+ If the information being modeled subsequently decreases
+ below (increases above) the maximum (minimum) value, the
+ gauge64 also decreases (increases).
+
+ In the value set and its semantics, this type is equivalent
+ to the CounterBasedGauge64 SMIv2 textual convention defined
+ in RFC 2856";
+ reference
+ "RFC 2856: Textual Conventions for Additional High Capacity
+ Data Types";
+ }
+
+ /*** collection of identifier-related types ***/
+
+ typedef object-identifier {
+ type string {
+ pattern '(([0-1](\.[1-3]?[0-9]))|(2\.(0|([1-9]\d*))))'
+ + '(\.(0|([1-9]\d*)))*';
+ }
+ description
+ "The object-identifier type represents administratively
+ assigned names in a registration-hierarchical-name tree.
+
+ Values of this type are denoted as a sequence of numerical
+ non-negative sub-identifier values. Each sub-identifier
+ value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers
+ are separated by single dots and without any intermediate
+ whitespace.
+
+ The ASN.1 standard restricts the value space of the first
+ sub-identifier to 0, 1, or 2. Furthermore, the value space
+ of the second sub-identifier is restricted to the range
+ 0 to 39 if the first sub-identifier is 0 or 1. Finally,
+ the ASN.1 standard requires that an object identifier
+ has always at least two sub-identifiers. The pattern
+ captures these restrictions.
+
+ Although the number of sub-identifiers is not limited,
+ module designers should realize that there may be
+ implementations that stick with the SMIv2 limit of 128
+ sub-identifiers.
+
+ This type is a superset of the SMIv2 OBJECT IDENTIFIER type
+ since it is not restricted to 128 sub-identifiers. Hence,
+ this type SHOULD NOT be used to represent the SMIv2 OBJECT
+ IDENTIFIER type; the object-identifier-128 type SHOULD be
+ used instead.";
+ reference
+ "ISO9834-1: Information technology -- Open Systems
+ Interconnection -- Procedures for the operation of OSI
+ Registration Authorities: General procedures and top
+ arcs of the ASN.1 Object Identifier tree";
+ }
+
+ typedef object-identifier-128 {
+ type object-identifier {
+ pattern '\d*(\.\d*){1,127}';
+ }
+ description
+ "This type represents object-identifiers restricted to 128
+ sub-identifiers.
+
+ In the value set and its semantics, this type is equivalent
+ to the OBJECT IDENTIFIER type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef yang-identifier {
+ type string {
+ length "1..max";
+ pattern '[a-zA-Z_][a-zA-Z0-9\-_.]*';
+ pattern '.|..|[^xX].*|.[^mM].*|..[^lL].*';
+ }
+ description
+ "A YANG identifier string as defined by the 'identifier'
+ rule in Section 12 of RFC 6020. An identifier must
+ start with an alphabetic character or an underscore
+ followed by an arbitrary sequence of alphabetic or
+ numeric characters, underscores, hyphens, or dots.
+
+ A YANG identifier MUST NOT start with any possible
+ combination of the lowercase or uppercase character
+ sequence 'xml'.";
+ reference
+ "RFC 6020: YANG - A Data Modeling Language for the Network
+ Configuration Protocol (NETCONF)";
+ }
+
+ /*** collection of types related to date and time***/
+
+ typedef date-and-time {
+ type string {
+ pattern '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?'
+ + '(Z|[\+\-]\d{2}:\d{2})';
+ }
+ description
+ "The date-and-time type is a profile of the ISO 8601
+ standard for representation of dates and times using the
+ Gregorian calendar. The profile is defined by the
+ date-time production in Section 5.6 of RFC 3339.
+
+ The date-and-time type is compatible with the dateTime XML
+ schema type with the following notable exceptions:
+
+ (a) The date-and-time type does not allow negative years.
+
+ (b) The date-and-time time-offset -00:00 indicates an unknown
+ time zone (see RFC 3339) while -00:00 and +00:00 and Z
+ all represent the same time zone in dateTime.
+
+ (c) The canonical format (see below) of data-and-time values
+ differs from the canonical format used by the dateTime XML
+ schema type, which requires all times to be in UTC using
+ the time-offset 'Z'.
+
+ This type is not equivalent to the DateAndTime textual
+ convention of the SMIv2 since RFC 3339 uses a different
+ separator between full-date and full-time and provides
+ higher resolution of time-secfrac.
+
+ The canonical format for date-and-time values with a known time
+ zone uses a numeric time zone offset that is calculated using
+ the device's configured known offset to UTC time. A change of
+ the device's offset to UTC time will cause date-and-time values
+ to change accordingly. Such changes might happen periodically
+ in case a server follows automatically daylight saving time
+ (DST) time zone offset changes. The canonical format for
+ date-and-time values with an unknown time zone (usually
+ referring to the notion of local time) uses the time-offset
+ -00:00.";
+ reference
+ "RFC 3339: Date and Time on the Internet: Timestamps
+ RFC 2579: Textual Conventions for SMIv2
+ XSD-TYPES: XML Schema Part 2: Datatypes Second Edition";
+ }
+
+ typedef timeticks {
+ type uint32;
+ description
+ "The timeticks type represents a non-negative integer that
+ represents the time, modulo 2^32 (4294967296 decimal), in
+ hundredths of a second between two epochs. When a schema
+ node is defined that uses this type, the description of
+ the schema node identifies both of the reference epochs.
+
+ In the value set and its semantics, this type is equivalent
+ to the TimeTicks type of the SMIv2.";
+ reference
+ "RFC 2578: Structure of Management Information Version 2
+ (SMIv2)";
+ }
+
+ typedef timestamp {
+ type yang:timeticks;
+ description
+ "The timestamp type represents the value of an associated
+ timeticks schema node at which a specific occurrence
+ happened. The specific occurrence must be defined in the
+ description of any schema node defined using this type. When
+ the specific occurrence occurred prior to the last time the
+ associated timeticks attribute was zero, then the timestamp
+ value is zero. Note that this requires all timestamp values
+ to be reset to zero when the value of the associated timeticks
+ attribute reaches 497+ days and wraps around to zero.
+
+ The associated timeticks schema node must be specified
+ in the description of any schema node using this type.
+
+ In the value set and its semantics, this type is equivalent
+ to the TimeStamp textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ /*** collection of generic address types ***/
+
+ typedef phys-address {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+
+ description
+ "Represents media- or physical-level addresses represented
+ as a sequence octets, each octet represented by two hexadecimal
+ numbers. Octets are separated by colons. The canonical
+ representation uses lowercase characters.
+
+ In the value set and its semantics, this type is equivalent
+ to the PhysAddress textual convention of the SMIv2.";
+ reference
+ "RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ typedef mac-address {
+ type string {
+ pattern '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}';
+ }
+ description
+ "The mac-address type represents an IEEE 802 MAC address.
+ The canonical representation uses lowercase characters.
+
+ In the value set and its semantics, this type is equivalent
+ to the MacAddress textual convention of the SMIv2.";
+ reference
+ "IEEE 802: IEEE Standard for Local and Metropolitan Area
+ Networks: Overview and Architecture
+ RFC 2579: Textual Conventions for SMIv2";
+ }
+
+ /*** collection of XML-specific types ***/
+
+ typedef xpath1.0 {
+ type string;
+ description
+ "This type represents an XPATH 1.0 expression.
+
+ When a schema node is defined that uses this type, the
+ description of the schema node MUST specify the XPath
+ context in which the XPath expression is evaluated.";
+ reference
+ "XPATH: XML Path Language (XPath) Version 1.0";
+ }
+
+ /*** collection of string types ***/
+
+ typedef hex-string {
+ type string {
+ pattern '([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?';
+ }
+ description
+ "A hexadecimal string with octets represented as hex digits
+ separated by colons. The canonical representation uses
+ lowercase characters.";
+ }
+
+ typedef uuid {
+ type string {
+ pattern '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'
+ + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12}';
+ }
+ description
+ "A Universally Unique IDentifier in the string representation
+ defined in RFC 4122. The canonical representation uses
+ lowercase characters.
+
+ The following is an example of a UUID in string representation:
+ f81d4fae-7dec-11d0-a765-00a0c91e6bf6
+ ";
+ reference
+ "RFC 4122: A Universally Unique IDentifier (UUID) URN
+ Namespace";
+ }
+
+ typedef dotted-quad {
+ type string {
+ pattern
+ '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
+ + '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
+ }
+ description
+ "An unsigned 32-bit number expressed in the dotted-quad
+ notation, i.e., four octets written as decimal numbers
+ and separated with the '.' (full stop) character.";
+ }
+}
diff --git a/models/yang@2017-02-20.h b/models/yang@2017-02-20.h
new file mode 100644
index 0000000..19b6430
--- /dev/null
+++ b/models/yang@2017-02-20.h
@@ -0,0 +1,168 @@
+unsigned char yang_2017_02_20_yang[] = {
+ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x20,
+ 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x22,
+ 0x75, 0x72, 0x6e, 0x3a, 0x69, 0x65, 0x74, 0x66, 0x3a, 0x70, 0x61, 0x72,
+ 0x61, 0x6d, 0x73, 0x3a, 0x78, 0x6d, 0x6c, 0x3a, 0x6e, 0x73, 0x3a, 0x79,
+ 0x61, 0x6e, 0x67, 0x3a, 0x31, 0x22, 0x3b, 0x70, 0x72, 0x65, 0x66, 0x69,
+ 0x78, 0x20, 0x79, 0x61, 0x6e, 0x67, 0x3b, 0x69, 0x6d, 0x70, 0x6f, 0x72,
+ 0x74, 0x20, 0x69, 0x65, 0x74, 0x66, 0x2d, 0x79, 0x61, 0x6e, 0x67, 0x2d,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x7b, 0x70, 0x72,
+ 0x65, 0x66, 0x69, 0x78, 0x20, 0x6d, 0x64, 0x3b, 0x72, 0x65, 0x76, 0x69,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2d, 0x64, 0x61, 0x74, 0x65, 0x20, 0x32, 0x30,
+ 0x31, 0x36, 0x2d, 0x30, 0x38, 0x2d, 0x30, 0x35, 0x3b, 0x7d, 0x6f, 0x72,
+ 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22,
+ 0x6c, 0x69, 0x62, 0x79, 0x61, 0x6e, 0x67, 0x22, 0x3b, 0x63, 0x6f, 0x6e,
+ 0x74, 0x61, 0x63, 0x74, 0x0a, 0x22, 0x57, 0x65, 0x62, 0x3a, 0x20, 0x20,
+ 0x20, 0x20, 0x3c, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67,
+ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x45,
+ 0x53, 0x4e, 0x45, 0x54, 0x2f, 0x6c, 0x69, 0x62, 0x79, 0x61, 0x6e, 0x67,
+ 0x2f, 0x3e, 0x0a, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x3a, 0x20, 0x52,
+ 0x61, 0x64, 0x65, 0x6b, 0x20, 0x4b, 0x72, 0x65, 0x6a, 0x63, 0x69, 0x20,
+ 0x3c, 0x72, 0x6b, 0x72, 0x65, 0x6a, 0x63, 0x69, 0x40, 0x63, 0x65, 0x73,
+ 0x6e, 0x65, 0x74, 0x2e, 0x63, 0x7a, 0x3e, 0x22, 0x3b, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x54, 0x68,
+ 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x6b, 0x69, 0x6e, 0x64,
+ 0x20, 0x6f, 0x66, 0x20, 0x66, 0x61, 0x6b, 0x65, 0x20, 0x6d, 0x6f, 0x64,
+ 0x65, 0x6c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6e, 0x6f, 0x20, 0x64,
+ 0x61, 0x74, 0x61, 0x2c, 0x20, 0x74, 0x79, 0x70, 0x65, 0x64, 0x65, 0x66,
+ 0x73, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e,
+ 0x67, 0x0a, 0x65, 0x6c, 0x73, 0x65, 0x2e, 0x20, 0x6c, 0x69, 0x62, 0x79,
+ 0x61, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65, 0x73, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x20, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20,
+ 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x76, 0x61,
+ 0x72, 0x69, 0x6f, 0x75, 0x73, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x0a, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x52, 0x46, 0x43,
+ 0x20, 0x36, 0x30, 0x32, 0x30, 0x2e, 0x22, 0x3b, 0x72, 0x65, 0x76, 0x69,
+ 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31, 0x37, 0x2d, 0x30, 0x32,
+ 0x2d, 0x32, 0x30, 0x20, 0x7b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x41, 0x64, 0x64, 0x65, 0x64, 0x20,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, 0x72,
+ 0x20, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x27, 0x73, 0x20, 0x65,
+ 0x64, 0x69, 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x6d,
+ 0x61, 0x6e, 0x69, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
+ 0x77, 0x69, 0x74, 0x68, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64,
+ 0x20, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20,
+ 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x2e, 0x22,
+ 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22,
+ 0x52, 0x46, 0x43, 0x20, 0x37, 0x39, 0x35, 0x30, 0x3a, 0x20, 0x54, 0x68,
+ 0x65, 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x31, 0x2e, 0x31, 0x20, 0x44,
+ 0x61, 0x74, 0x61, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67,
+ 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x3b, 0x7d,
+ 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x30, 0x31,
+ 0x36, 0x2d, 0x30, 0x32, 0x2d, 0x31, 0x31, 0x20, 0x7b, 0x64, 0x65, 0x73,
+ 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x22, 0x49, 0x6e,
+ 0x69, 0x74, 0x69, 0x61, 0x6c, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+ 0x6f, 0x6e, 0x22, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
+ 0x65, 0x0a, 0x22, 0x52, 0x46, 0x43, 0x20, 0x36, 0x30, 0x32, 0x30, 0x3a,
+ 0x20, 0x59, 0x41, 0x4e, 0x47, 0x20, 0x2d, 0x20, 0x41, 0x20, 0x44, 0x61,
+ 0x74, 0x61, 0x20, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x69, 0x6e, 0x67, 0x20,
+ 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x20, 0x66, 0x6f, 0x72,
+ 0x0a, 0x74, 0x68, 0x65, 0x20, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
+ 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x20,
+ 0x28, 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x29, 0x22, 0x3b, 0x7d,
+ 0x6d, 0x64, 0x3a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x7b, 0x74, 0x79,
+ 0x70, 0x65, 0x20, 0x65, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x20, 0x7b, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x66, 0x69, 0x72,
+ 0x73, 0x74, 0x3b, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x6c, 0x61, 0x73, 0x74,
+ 0x3b, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65,
+ 0x3b, 0x65, 0x6e, 0x75, 0x6d, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x3b,
+ 0x7d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x22,
+ 0x52, 0x46, 0x43, 0x37, 0x39, 0x35, 0x30, 0x20, 0x73, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x37, 0x2e, 0x38, 0x2e, 0x36, 0x2e, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x37,
+ 0x2e, 0x37, 0x2e, 0x39, 0x2e, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72,
+ 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x49, 0x6e, 0x20, 0x75,
+ 0x73, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20,
+ 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x20, 0x74, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x0a,
+ 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+ 0x20, 0x6c, 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x74,
+ 0x68, 0x65, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x69, 0x73, 0x20,
+ 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x74,
+ 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64,
+ 0x20, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x0a, 0x74, 0x68, 0x65, 0x20,
+ 0x4e, 0x45, 0x54, 0x43, 0x4f, 0x4e, 0x46, 0x20, 0x3c, 0x65, 0x64, 0x69,
+ 0x74, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x3e, 0x20, 0x5c, 0x22,
+ 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5c, 0x22, 0x20, 0x6f, 0x70, 0x65,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x69,
+ 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x61, 0x20, 0x6e, 0x65, 0x77, 0x20,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x0a, 0x6c, 0x65, 0x61, 0x66,
+ 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2c,
+ 0x20, 0x6f, 0x72, 0x20, 0x64, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x5c,
+ 0x22, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x5c, 0x22, 0x20, 0x6f, 0x72, 0x20,
+ 0x5c, 0x22, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5c, 0x22, 0x20,
+ 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x74,
+ 0x6f, 0x20, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x0a, 0x61, 0x20, 0x6e,
+ 0x65, 0x77, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c,
+ 0x65, 0x61, 0x66, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x20, 0x65, 0x6e, 0x74,
+ 0x72, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x6f,
+ 0x6e, 0x65, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x69, 0x73, 0x20, 0x5c, 0x22, 0x62,
+ 0x65, 0x66, 0x6f, 0x72, 0x65, 0x5c, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x5c,
+ 0x22, 0x61, 0x66, 0x74, 0x65, 0x72, 0x5c, 0x22, 0x2c, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x5c, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5c, 0x22, 0x2f,
+ 0x5c, 0x22, 0x6b, 0x65, 0x79, 0x5c, 0x22, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x0a, 0x4d, 0x55, 0x53, 0x54, 0x20, 0x61,
+ 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20,
+ 0x74, 0x6f, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x61,
+ 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x65,
+ 0x6e, 0x74, 0x72, 0x79, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x6c, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x65, 0x61, 0x66,
+ 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x0a, 0x0a, 0x49, 0x66, 0x20, 0x6e,
+ 0x6f, 0x20, 0x5c, 0x22, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5c, 0x22,
+ 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e,
+ 0x20, 0x74, 0x68, 0x65, 0x20, 0x5c, 0x22, 0x63, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x5c, 0x22, 0x20, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x2c, 0x20, 0x69, 0x74, 0x0a, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
+ 0x74, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x5c, 0x22, 0x6c, 0x61, 0x73, 0x74,
+ 0x5c, 0x22, 0x2e, 0x22, 0x3b, 0x7d, 0x6d, 0x64, 0x3a, 0x61, 0x6e, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73, 0x74, 0x72, 0x69,
+ 0x6e, 0x67, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+ 0x20, 0x22, 0x52, 0x46, 0x43, 0x37, 0x39, 0x35, 0x30, 0x20, 0x73, 0x65,
+ 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x37, 0x2e, 0x37, 0x2e, 0x39, 0x2e,
+ 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x0a, 0x22, 0x49, 0x6e, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x6f,
+ 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x65, 0x61, 0x66, 0x2d,
+ 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20,
+ 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x69, 0x73, 0x20,
+ 0x75, 0x73, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x70, 0x65,
+ 0x63, 0x69, 0x66, 0x69, 0x65, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72,
+ 0x65, 0x2f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x77, 0x68, 0x69, 0x63,
+ 0x68, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69,
+ 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a,
+ 0x6e, 0x65, 0x77, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
+ 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x69,
+ 0x6e, 0x73, 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x6d,
+ 0x64, 0x3a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6b, 0x65, 0x79, 0x20, 0x7b, 0x74, 0x79, 0x70, 0x65, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x3b, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
+ 0x6e, 0x63, 0x65, 0x20, 0x22, 0x52, 0x46, 0x43, 0x37, 0x39, 0x35, 0x30,
+ 0x20, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x37, 0x2e, 0x38,
+ 0x2e, 0x36, 0x2e, 0x22, 0x3b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
+ 0x74, 0x69, 0x6f, 0x6e, 0x0a, 0x22, 0x49, 0x6e, 0x20, 0x75, 0x73, 0x65,
+ 0x72, 0x20, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20, 0x6c, 0x69,
+ 0x73, 0x74, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62,
+ 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x0a,
+ 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73,
+ 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69,
+ 0x66, 0x69, 0x65, 0x73, 0x20, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x2f,
+ 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20,
+ 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x6e, 0x73,
+ 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x74, 0x68, 0x65, 0x0a, 0x6e, 0x65,
+ 0x77, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x73,
+ 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, 0x73,
+ 0x65, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x22, 0x3b, 0x7d, 0x7d, 0x00
+};
diff --git a/models/yang@2017-02-20.yang b/models/yang@2017-02-20.yang
new file mode 100644
index 0000000..e2bff77
--- /dev/null
+++ b/models/yang@2017-02-20.yang
@@ -0,0 +1,77 @@
+module yang {
+ namespace "urn:ietf:params:xml:ns:yang:1";
+ prefix yang;
+
+ import ietf-yang-metadata {
+ prefix md;
+ revision-date 2016-08-05;
+ }
+
+ organization
+ "libyang";
+
+ contact
+ "Web: <https://github.com/CESNET/libyang/>
+ Author: Radek Krejci <rkrejci@cesnet.cz>";
+
+ description
+ "This is a kind of fake model with no data, typedefs or anything
+ else. libyang uses this module to implement various YANG attributes
+ defined in RFC 6020.";
+
+ revision 2017-02-20 {
+ description
+ "Added metadata for NETCONF's edit-config manipulation with ordered
+ lists and leaf-lists.";
+ reference
+ "RFC 7950: The YANG 1.1 Data Modeling Language";
+ }
+
+ revision 2016-02-11 {
+ description
+ "Initial revision";
+ reference
+ "RFC 6020: YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)";
+ }
+
+ md:annotation insert {
+ type enumeration {
+ enum first;
+ enum last;
+ enum before;
+ enum after;
+ }
+ reference "RFC7950 section 7.8.6. and section 7.7.9.";
+ description
+ "In user ordered leaf-list, the attribute can be used to control
+ where in the leaf-list the entry is inserted. It can be used during
+ the NETCONF <edit-config> \"create\" operations to insert a new list or
+ leaf-list entry, or during \"merge\" or \"replace\" operations to insert
+ a new list or leaf-list entry or move an existing one.
+
+ If the value is \"before\" or \"after\", the \"value\"/\"key\" attribute
+ MUST also be used to specify an existing entry in the list or leaf-list.
+
+ If no \"insert\" attribute is present in the \"create\" operation, it
+ defaults to \"last\".";
+ }
+
+ md:annotation value {
+ type string;
+ reference "RFC7950 section 7.7.9.";
+ description
+ "In user ordered leaf-list, the attribute must be used if the attribute
+ insert is used and specifies before/after which existing instance the
+ new instance should be inserted.";
+ }
+
+ md:annotation key {
+ type string;
+ reference "RFC7950 section 7.8.6.";
+ description
+ "In user ordered list, the attribute must be used if the attribute
+ insert is used and specifies before/after which existing instance the
+ new instance should be inserted.";
+ }
+}
diff --git a/src/common.c b/src/common.c
index 912ee13..ab3b71f 100644
--- a/src/common.c
+++ b/src/common.c
@@ -12,12 +12,18 @@
* https://opensource.org/licenses/BSD-3-Clause
*/
#define _XOPEN_SOURCE
+#define _DEFAULT_SOURCE
+#include <assert.h>
+#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
-#include <time.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
#include "common.h"
#include "tree_schema.h"
@@ -242,43 +248,59 @@
}
LY_ERR
-lysp_check_date(struct ly_ctx *ctx, const char *date, int date_len, const char *stmt)
+ly_mmap(struct ly_ctx *ctx, int fd, size_t *length, void **addr)
{
- int i;
- struct tm tm, tm_;
- char *r;
+ struct stat sb;
+ long pagesize;
+ size_t m;
- LY_CHECK_ARG_RET(ctx, date, LY_EINVAL);
- LY_CHECK_ERR_RET(date_len != LY_REV_SIZE - 1, LOGARG(ctx, date_len), LY_EINVAL);
+ assert(length);
+ assert(addr);
+ assert(fd >= 0);
- /* check format */
- for (i = 0; i < date_len; i++) {
- if (i == 4 || i == 7) {
- if (date[i] != '-') {
- goto error;
- }
- } else if (!isdigit(date[i])) {
- goto error;
- }
+ if (fstat(fd, &sb) == -1) {
+ LOGERR(ctx, LY_ESYS, "Failed to stat the file descriptor (%s) for the mmap().", strerror(errno));
+ return LY_ESYS;
}
-
- /* check content, e.g. 2018-02-31 */
- memset(&tm, 0, sizeof tm);
- r = strptime(date, "%Y-%m-%d", &tm);
- if (!r || r != &date[LY_REV_SIZE - 1]) {
- goto error;
+ if (!S_ISREG(sb.st_mode)) {
+ LOGERR(ctx, LY_EINVAL, "File to mmap() is not a regular file.");
+ return LY_ESYS;
}
- memcpy(&tm_, &tm, sizeof tm);
- mktime(&tm_); /* mktime modifies tm_ if it refers invalid date */
- if (tm.tm_mday != tm_.tm_mday) { /* e.g 2018-02-29 -> 2018-03-01 */
- /* checking days is enough, since other errors
- * have been checked by strptime() */
- goto error;
+ if (!sb.st_size) {
+ *addr = NULL;
+ return LY_SUCCESS;
+ }
+ pagesize = sysconf(_SC_PAGESIZE);
+
+ m = sb.st_size % pagesize;
+ if (m && pagesize - m >= 1) {
+ /* there will be enough space (at least 1 byte) after the file content mapping to provide zeroed NULL-termination byte */
+ *length = sb.st_size + 1;
+ *addr = mmap(NULL, *length, PROT_READ, MAP_PRIVATE, fd, 0);
+ } else {
+ /* there will not be enough bytes after the file content mapping for the additional bytes and some of them
+ * would overflow into another page that would not be zerroed and any access into it would generate SIGBUS.
+ * Therefore we have to do the following hack with double mapping. First, the required number of bytes
+ * (including the additinal bytes) is required as anonymous and thus they will be really provided (actually more
+ * because of using whole pages) and also initialized by zeros. Then, the file is mapped to the same address
+ * where the anonymous mapping starts. */
+ *length = sb.st_size + pagesize;
+ *addr = mmap(NULL, *length, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ *addr = mmap(*addr, sb.st_size, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, 0);
+ }
+ if (*addr == MAP_FAILED) {
+ LOGERR(ctx, LY_ESYS, "mmap() failed (%s).", strerror(errno));
+ return LY_ESYS;
}
return LY_SUCCESS;
+}
-error:
- LOGVAL(ctx, LY_VLOG_NONE, NULL, LY_VCODE_INVAL, date_len, date, stmt);
- return LY_EINVAL;
+LY_ERR
+ly_munmap(void *addr, size_t length)
+{
+ if (munmap(addr, length)) {
+ return LY_ESYS;
+ }
+ return LY_SUCCESS;
}
diff --git a/src/common.h b/src/common.h
index 731f711..a214f4d 100644
--- a/src/common.h
+++ b/src/common.h
@@ -136,21 +136,6 @@
* Parsers
*****************************************************************************/
-enum yang_module_stmt {
- Y_MOD_MODULE_HEADER,
- Y_MOD_LINKAGE,
- Y_MOD_META,
- Y_MOD_REVISION,
- Y_MOD_BODY
-};
-
-enum yang_arg {
- Y_IDENTIF_ARG, /**< YANG "identifier-arg-str" rule */
- Y_PREF_IDENTIF_ARG, /**< YANG "identifier-ref-arg-str" rule */
- Y_STR_ARG, /**< YANG "string" rule */
- Y_MAYBE_STR_ARG /**< optional YANG "string" rule */
-};
-
enum yang_keyword {
YANG_NONE = 0,
YANG_ACTION,
@@ -266,28 +251,45 @@
LY_ERR ly_getutf8(const char **input, unsigned int *utf8_char, size_t *bytes_read);
/**
- * @brief Check date string (4DIGIT "-" 2DIGIT "-" 2DIGIT)
+ * @brief mmap(2) wrapper to map input files into memory to unify parsing.
*
- * @param[in] ctx Context to store log message.
- * @param[in] date Date string to check (non-necessarily terminated by \0)
- * @param[in] date_len Length of the date string, 10 expected.
- * @param[in] stmt Statement name for error message.
+ * The address space is allocate only for reading.
+ *
+ * @param[in] ctx libyang context for logging
+ * @param[in] fd Open file descriptor of a file to map.
+ * @param[out] length Allocated size.
+ * @param[out] addr Address where the file is mapped.
* @return LY_ERR value.
*/
-LY_ERR lysp_check_date(struct ly_ctx *ctx, const char *date, int date_len, const char *stmt);
+LY_ERR ly_mmap(struct ly_ctx *ctx, int fd, size_t *length, void **addr);
-/*
- * Macros to work with lysp structures arrays.
+/**
+ * @brief munmap(2) wrapper to free the memory mapped by ly_mmap()
*
- * There is a byte allocated after the last item with value 0.
+ * @param[in] addr Address where the input file is mapped.
+ * @param[in] length Allocated size of the address space.
+ * @return LY_ERR value.
*/
-#define LYSP_ARRAY_NEW_RET(CTX, ARRAY, NEW_ITEM, RETVAL) int _count; \
- for (_count = 0; *(ARRAY) && *((uint8_t *)(*(ARRAY) + _count)); ++_count); \
- if (!_count) *(ARRAY) = malloc(sizeof **(ARRAY) + 1); \
- else *(ARRAY) = ly_realloc(*(ARRAY), (_count + 1) * sizeof **(ARRAY) + 1); \
- LY_CHECK_ERR_RET(!*(ARRAY), LOGMEM(CTX->ctx), RETVAL); \
- *((uint8_t *)(*(ARRAY) + _count + 1)) = 0; \
- (NEW_ITEM) = (*(ARRAY)) + _count; \
+LY_ERR ly_munmap(void *addr, size_t length);
+
+/**
+ * @brief (Re-)Allocation of a ([sized array](@ref sizedarrays)).
+ *
+ * @param[in] CTX libyang context for logging.
+ * @param[in,out] ARRAY Pointer to the array to allocate/resize.
+ * @param[out] NEW_ITEM Returning pointer to the newly allocated record in the ARRAY.
+ * @param[in] RETVAL Return value for the case of error (memory allocation failure).
+ */
+#define LYSP_ARRAY_NEW_RET(CTX, ARRAY, NEW_ITEM, RETVAL) \
+ if (!(ARRAY)) { \
+ ARRAY = malloc(sizeof(uint32_t) + sizeof *(ARRAY)); \
+ *((uint32_t*)(ARRAY)) = 1; \
+ } else { \
+ ++(*((uint32_t*)(ARRAY))); \
+ ARRAY = ly_realloc(ARRAY, sizeof(uint32_t) + (*((uint32_t*)(ARRAY)) * sizeof *(ARRAY))); \
+ LY_CHECK_ERR_RET(!(ARRAY), LOGMEM(CTX), RETVAL); \
+ } \
+ (NEW_ITEM) = (void*)((uint32_t*)((ARRAY) + *((uint32_t*)(ARRAY)) - 1) + 1); \
memset(NEW_ITEM, 0, sizeof *(NEW_ITEM));
#endif /* LY_COMMON_H_ */
diff --git a/src/context.c b/src/context.c
index d49b237..1216704 100644
--- a/src/context.c
+++ b/src/context.c
@@ -24,10 +24,10 @@
#include "context.h"
#include "common.h"
-
+#include "tree_schema_internal.h"
#include "libyang.h"
-#define LY_INTERNAL_MODS_COUNT 0 /* TODO 6 when parser available */
+#define LY_INTERNAL_MODS_COUNT 6
#define IETF_YANG_METADATA_PATH "../models/ietf-yang-metadata@2016-08-05.h"
#define YANG_PATH "../models/yang@2017-02-20.h"
@@ -37,7 +37,6 @@
#define IETF_YANG_LIB_PATH "../models/ietf-yang-library@2018-01-17.h"
#define IETF_YANG_LIB_REV "2018-01-17"
-#if LY_INTERNAL_MODS_COUNT
#include IETF_YANG_METADATA_PATH
#include YANG_PATH
#include IETF_INET_TYPES_PATH
@@ -52,15 +51,14 @@
uint8_t implemented;
LYS_INFORMAT format;
} internal_modules[LY_INTERNAL_MODS_COUNT] = {
- {"ietf-yang-metadata", "2016-08-05", (const char*)ietf_yang_metadata_2016_08_05_yin, 0, LYS_IN_YIN},
- {"yang", "2017-02-20", (const char*)yang_2017_02_20_yin, 1, LYS_IN_YIN},
- {"ietf-inet-types", "2013-07-15", (const char*)ietf_inet_types_2013_07_15_yin, 0, LYS_IN_YIN},
- {"ietf-yang-types", "2013-07-15", (const char*)ietf_yang_types_2013_07_15_yin, 0, LYS_IN_YIN},
+ {"ietf-yang-metadata", "2016-08-05", (const char*)ietf_yang_metadata_2016_08_05_yang, 0, LYS_IN_YANG},
+ {"yang", "2017-02-20", (const char*)yang_2017_02_20_yang, 1, LYS_IN_YANG},
+ {"ietf-inet-types", "2013-07-15", (const char*)ietf_inet_types_2013_07_15_yang, 0, LYS_IN_YANG},
+ {"ietf-yang-types", "2013-07-15", (const char*)ietf_yang_types_2013_07_15_yang, 0, LYS_IN_YANG},
/* ietf-datastores and ietf-yang-library must be right here at the end of the list! */
- {"ietf-datastores", "2017-08-17", (const char*)ietf_datastores_2017_08_17_yin, 0, LYS_IN_YIN},
- {"ietf-yang-library", IETF_YANG_LIB_REV, (const char*)ietf_yang_library_2018_01_17_yin, 1, LYS_IN_YIN}
+ {"ietf-datastores", "2017-08-17", (const char*)ietf_datastores_2017_08_17_yang, 0, LYS_IN_YANG},
+ {"ietf-yang-library", IETF_YANG_LIB_REV, (const char*)ietf_yang_library_2018_01_17_yang, 1, LYS_IN_YANG}
};
-#endif
API LY_ERR
ly_ctx_set_searchdir(struct ly_ctx *ctx, const char *search_dir)
@@ -164,6 +162,7 @@
struct lys_module *module;
char *search_dir_list;
char *sep, *dir;
+ int i;
LY_ERR rc = LY_SUCCESS;
ctx = calloc(1, sizeof *ctx);
@@ -210,14 +209,12 @@
}
ctx->module_set_id = 1;
-#if 0 /* TODO when parser implemented */
/* load internal modules */
- for (i = 0; i < (options & LY_CTX_NOYANGLIBRARY) ? LY_INTERNAL_MODS_COUNT - 2 : LY_INTERNAL_MODS_COUNT; i++) {
+ for (i = 0; i < ((options & LY_CTX_NOYANGLIBRARY) ? (LY_INTERNAL_MODS_COUNT - 2) : LY_INTERNAL_MODS_COUNT); i++) {
module = (struct lys_module *)lys_parse_mem(ctx, internal_modules[i].data, internal_modules[i].format);
LY_CHECK_GOTO(!module, error);
module->parsed->implemented = internal_modules[i].implemented;
}
-#endif
*new_ctx = ctx;
return rc;
@@ -274,9 +271,7 @@
/* models list */
for (; ctx->list.count; ctx->list.count--) {
/* remove the module */
-#if 0 /* TODO when parser implemented */
- lys_free(ctx->list[ctx->list.count - 1], private_destructor, 1, 0);
-#endif
+ lys_module_free(ctx->list.objs[ctx->list.count - 1], private_destructor);
}
free(ctx->list.objs);
diff --git a/src/libyang.h b/src/libyang.h
index eb0d3dd..bb93a74 100644
--- a/src/libyang.h
+++ b/src/libyang.h
@@ -22,6 +22,82 @@
#endif
/**
+ * @mainpage About
+ *
+ * libyang is a library implementing processing of the YANG schemas and data modeled by the YANG language. The
+ * library is implemented in C for GNU/Linux and provides C API.
+ *
+ * @section about-features Main Features
+ *
+ * - [Parsing (and validating) schemas](@ref howtoschemasparsers) in YANG format.
+ * - [Parsing (and validating) schemas](@ref howtoschemasparsers) in YIN format.
+ * - [Parsing, validating and printing instance data](@ref howtodata) in XML format.
+ * - [Parsing, validating and printing instance data](@ref howtodata) in JSON format
+ * ([RFC 7951](https://tools.ietf.org/html/rfc7951)).
+ * - [Manipulation with the instance data](@ref howtodatamanipulators).
+ * - Support for [default values in the instance data](@ref howtodatawd) ([RFC 6243](https://tools.ietf.org/html/rfc6243)).
+ * - Support for [YANG extensions and user types](@ref howtoschemaplugins).
+ * - Support for [YANG Metadata](@ref howtoschemametadata) ([RFC 7952](https://tools.ietf.org/html/rfc6243)).
+ *
+ * The current implementation covers YANG 1.0 ([RFC 6020](https://tools.ietf.org/html/rfc6020)) as well as
+ * YANG 1.1 ([RFC 7950](https://tools.ietf.org/html/rfc7950)).
+ *
+ * @section about-license License
+ *
+ * Copyright (c) 2015-2017 CESNET, z.s.p.o.
+ *
+ * (The BSD 3-Clause License)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name of the Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ */
+
+/**
+ * @page howto How To ...
+ *
+ * - @subpage howtocontext
+ * - @subpage howtoschemas
+ * - @subpage howtodata
+ * - @subpage howtoxpath
+ * - @subpage howtoxml
+ * - @subpage howtothreads
+ * - @subpage howtologger
+ * - @subpage howtostructures
+ */
+
+/**
+ * @page howtostructures Data Structures
+ *
+ * @section sizedarrays Sized Arrays
+ *
+ * The structure starts with 32bit number storing size of the array - the number of the items inside. The size is part of the
+ * array to allocate it together with the array itself only when it is needed. This way the memory demands are decreased with
+ * possibility to have "infinite" (32bit) array of items. Because of a known size, it is not terminated by any special byte
+ * (sequence), so there is also no limit for specific content of the stored records (e.g. that first byte must not be NULL).
+ *
+ * Due to the structure, the records in the array cannot be accessed directly. There is a set of macros supposed to make
+ * work with the arrays more easy.
+ *
+ * - ::LY_ARRAY_SIZE
+ * - ::LY_ARRAY_INDEX
+ * - ::LY_ARRAY_FOR
+ *
+ * @section struct_lists Lists
+ *
+ * The lists are structures connected via a `next` pointer. Iterating over the siblings can be simply done by ::LY_LIST_FOR macro.
+ */
+
+/**
* @defgroup context Context
* @{
*
@@ -175,8 +251,8 @@
* @param[in] ctx libyang context to destroy
* @param[in] private_destructor Optional destructor function for private objects assigned
* to the nodes via lys_set_private(). If NULL, the private objects are not freed by libyang.
- * Remember the differences between the structures derived from ::lys_node and always check
- * ::lys_node#nodetype.
+ * Remember the differences between the structures derived from ::lysc_node and always check
+ * ::lysc_node#nodetype.
*/
void ly_ctx_destroy(struct ly_ctx *ctx, void (*private_destructor)(const struct lysc_node *node, void *priv));
diff --git a/src/log.h b/src/log.h
index d1b159e..b5d6834 100644
--- a/src/log.h
+++ b/src/log.h
@@ -161,6 +161,8 @@
LYVE_SUCCESS = 0, /**< no error */
LYVE_SYNTAX, /**< generic syntax error */
LYVE_SYNTAX_YANG, /**< YANG-related syntax error */
+ LYVE_REFERENCE, /**< invalid referencing or using an item */
+ LYVE_SEMANTICS /**< generic semantic error */
} LY_VECODE;
/**
diff --git a/src/parser_yang.c b/src/parser_yang.c
index f69a3bb..805ef4f 100644
--- a/src/parser_yang.c
+++ b/src/parser_yang.c
@@ -27,12 +27,7 @@
#include "common.h"
#include "context.h"
#include "libyang.h"
-
-struct ly_parser_ctx {
- struct ly_ctx *ctx;
- uint64_t line; /* line number */
- uint64_t indent; /* current position on the line for indentation */
-};
+#include "tree_schema_internal.h"
/* Macro to check YANG's yang-char grammar rule */
#define is_yangutf8char(c) ((c >= 0x20 && c <= 0xd77) || c == 0x09 || c == 0x0a || c == 0x0d || \
@@ -910,6 +905,13 @@
case '\t':
/* mandatory "sep" */
break;
+ case ':':
+ /* keyword is not actually a keyword, but prefix of an extension.
+ * To avoid repeated check of the prefix syntax, move to the point where the colon was read
+ * and we will be checking the keyword (extension instance) itself */
+ prefix = 1;
+ MOVE_INPUT(ctx, data, 1);
+ goto extension;
case '{':
/* allowed only for input and output statements which can be without arguments */
if (*kw == YANG_INPUT || *kw == YANG_OUTPUT) {
@@ -925,6 +927,7 @@
} else {
/* still can be an extension */
prefix = 0;
+extension:
while (**data && (**data != ' ') && (**data != '\t') && (**data != '\n') && (**data != '{') && (**data != ';')) {
LY_CHECK_ERR_RET(ly_getutf8(data, &c, &len),
LOGVAL_YANG(ctx, LY_VCODE_INCHAR, (*data)[-len]), LY_EVALID);
@@ -1033,7 +1036,7 @@
struct lysp_ext_instance *e;
enum yang_keyword kw;
- LYSP_ARRAY_NEW_RET(ctx, exts, e, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *exts, e, LY_EMEM);
/* store name and insubstmt info */
e->name = lydict_insert(ctx->ctx, ext_name, ext_name_len);
@@ -1296,7 +1299,7 @@
enum yang_keyword kw;
struct lysp_include *inc;
- LYSP_ARRAY_NEW_RET(ctx, includes, inc, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *includes, inc, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -1340,7 +1343,7 @@
* @return LY_ERR values.
*/
static LY_ERR
-parse_import(struct ly_parser_ctx *ctx, const char **data, struct lysp_import **imports)
+parse_import(struct ly_parser_ctx *ctx, const char **data, struct lysp_module *module)
{
LY_ERR ret = 0;
char *buf, *word;
@@ -1348,7 +1351,7 @@
enum yang_keyword kw;
struct lysp_import *imp;
- LYSP_ARRAY_NEW_RET(ctx, imports, imp, LY_EVALID);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, module->imports, imp, LY_EVALID);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -1361,6 +1364,7 @@
switch (kw) {
case YANG_PREFIX:
ret = parse_text_field(ctx, data, LYEXT_SUBSTMT_PREFIX, 0, &imp->prefix, Y_IDENTIF_ARG, &imp->exts);
+ LY_CHECK_RET(lysp_check_prefix(ctx, module, &imp->prefix), LY_EVALID);
break;
case YANG_DESCRIPTION:
ret = parse_text_field(ctx, data, LYEXT_SUBSTMT_DESCRIPTION, 0, &imp->dsc, Y_STR_ARG, &imp->exts);
@@ -1409,7 +1413,7 @@
enum yang_keyword kw;
struct lysp_revision *rev;
- LYSP_ARRAY_NEW_RET(ctx, revs, rev, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *revs, rev, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
@@ -1470,7 +1474,7 @@
/* allocate new pointer */
for (count = 1; (*texts) && (*texts)[count - 1]; ++count);
- *texts = realloc(*texts, count * sizeof **texts);
+ *texts = realloc(*texts, (1 + count) * sizeof **texts);
LY_CHECK_ERR_RET(!*texts, LOGMEM(ctx->ctx), LY_EMEM);
/* get value */
@@ -1478,6 +1482,7 @@
LY_CHECK_RET(ret);
INSERT_WORD(ctx, buf, (*texts)[count - 1], word, word_len);
+ (*texts)[count] = NULL; /* NULL-termination of the array */
YANG_READ_SUBSTMT_FOR(ctx, data, kw, word, word_len, ret) {
LY_CHECK_RET(ret);
@@ -1676,7 +1681,7 @@
{
struct lysp_restr *restr;
- LYSP_ARRAY_NEW_RET(ctx, restrs, restr, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *restrs, restr, LY_EMEM);
return parse_restr(ctx, data, restr_kw, restr);
}
@@ -1977,7 +1982,7 @@
enum yang_keyword kw;
struct lysp_type_enum *enm;
- LYSP_ARRAY_NEW_RET(ctx, enums, enm, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *enums, enm, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
@@ -2223,7 +2228,7 @@
enum yang_keyword kw;
struct lysp_restr *restr;
- LYSP_ARRAY_NEW_RET(ctx, patterns, restr, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *patterns, restr, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
@@ -2237,9 +2242,10 @@
buf = malloc(word_len + 2);
}
LY_CHECK_ERR_RET(!buf, LOGMEM(ctx->ctx), LY_EMEM);
- memmove(buf + 1, word, word_len + 1);
- word[0] = 0x06;
- restr->arg = lydict_insert_zc(ctx->ctx, word);
+ memmove(buf + 1, word, word_len);
+ buf[0] = 0x06; /* pattern's default regular-match flag */
+ buf[word_len + 1] = '\0'; /* terminating NULL byte */
+ restr->arg = lydict_insert_zc(ctx->ctx, buf);
YANG_READ_SUBSTMT_FOR(ctx, data, kw, word, word_len, ret) {
LY_CHECK_RET(ret);
@@ -2349,7 +2355,7 @@
break;
case YANG_TYPE:
{
- LYSP_ARRAY_NEW_RET(ctx, &type->types, nest_type, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, type->types, nest_type, LY_EMEM);
}
ret = parse_type(ctx, data, nest_type);
break;
@@ -2782,7 +2788,7 @@
enum yang_keyword kw;
struct lysp_refine *rf;
- LYSP_ARRAY_NEW_RET(ctx, refines, rf, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *refines, rf, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
@@ -2855,7 +2861,7 @@
enum yang_keyword kw;
struct lysp_tpdf *tpdf;
- LYSP_ARRAY_NEW_RET(ctx, typedefs, tpdf, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *typedefs, tpdf, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -3002,7 +3008,7 @@
enum yang_keyword kw;
struct lysp_action *act;
- LYSP_ARRAY_NEW_RET(ctx, actions, act, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *actions, act, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -3071,7 +3077,7 @@
enum yang_keyword kw;
struct lysp_notif *notif;
- LYSP_ARRAY_NEW_RET(ctx, notifs, notif, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *notifs, notif, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -3159,7 +3165,7 @@
enum yang_keyword kw;
struct lysp_grp *grp;
- LYSP_ARRAY_NEW_RET(ctx, groupings, grp, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *groupings, grp, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -3248,7 +3254,7 @@
enum yang_keyword kw;
struct lysp_augment *aug;
- LYSP_ARRAY_NEW_RET(ctx, augments, aug, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *augments, aug, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
@@ -3969,7 +3975,7 @@
enum yang_keyword kw;
struct lysp_ext *ex;
- LYSP_ARRAY_NEW_RET(ctx, extensions, ex, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *extensions, ex, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -4181,6 +4187,10 @@
LOGVAL_YANG(ctx, LY_VCODE_INDEV, ly_devmod2str(dev_mod), ly_stmt2str(kw));
return LY_EVALID;
default:
+ if (d_rpl->type) {
+ LOGVAL_YANG(ctx, LY_VCODE_DUPSTMT, ly_stmt2str(kw));
+ return LY_EVALID;
+ }
d_rpl->type = calloc(1, sizeof *d_rpl->type);
LY_CHECK_ERR_RET(!d_rpl->type, LOGMEM(ctx->ctx), LY_EMEM);
ret = parse_type(ctx, data, d_rpl->type);
@@ -4240,7 +4250,7 @@
enum yang_keyword kw;
struct lysp_deviation *dev;
- LYSP_ARRAY_NEW_RET(ctx, deviations, dev, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *deviations, dev, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_STR_ARG, &word, &buf, &word_len);
@@ -4298,7 +4308,7 @@
enum yang_keyword kw;
struct lysp_feature *feat;
- LYSP_ARRAY_NEW_RET(ctx, features, feat, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *features, feat, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -4326,7 +4336,7 @@
break;
default:
LOGVAL_YANG(ctx, LY_VCODE_INCHILDSTMT, ly_stmt2str(kw), "feature");
- return LY_EMEM;
+ return LY_EVALID;
}
LY_CHECK_RET(ret);
}
@@ -4353,7 +4363,7 @@
enum yang_keyword kw;
struct lysp_ident *ident;
- LYSP_ARRAY_NEW_RET(ctx, identities, ident, LY_EMEM);
+ LYSP_ARRAY_NEW_RET(ctx->ctx, *identities, ident, LY_EMEM);
/* get value */
ret = get_argument(ctx, data, Y_IDENTIF_ARG, &word, &buf, &word_len);
@@ -4388,7 +4398,6 @@
}
LY_CHECK_RET(ret);
}
- LY_CHECK_RET(ret);
return ret;
}
@@ -4419,6 +4428,9 @@
YANG_READ_SUBSTMT_FOR(ctx, data, kw, word, word_len, ret) {
LY_CHECK_RET(ret);
+#define CHECK_ORDER(SECTION) \
+ if (mod_stmt > SECTION) {LOGVAL_YANG(ctx, LY_VCODE_INORD, ly_stmt2str(kw), ly_stmt2str(prev_kw)); return LY_EVALID;}mod_stmt = SECTION
+
switch (kw) {
/* module header */
case YANG_NAMESPACE:
@@ -4427,49 +4439,35 @@
LOGVAL_YANG(ctx, LY_VCODE_INCHILDSTMT, ly_stmt2str(kw), "submodule");
return LY_EVALID;
}
- /* fallthrough */
+ CHECK_ORDER(Y_MOD_MODULE_HEADER);
+ break;
case YANG_BELONGS_TO:
- if ((kw == YANG_BELONGS_TO) && !mod->submodule) {
+ if (!mod->submodule) {
LOGVAL_YANG(ctx, LY_VCODE_INCHILDSTMT, ly_stmt2str(kw), "module");
return LY_EVALID;
}
- /* fallthrough */
+ CHECK_ORDER(Y_MOD_MODULE_HEADER);
+ break;
case YANG_YANG_VERSION:
- if (mod_stmt > Y_MOD_MODULE_HEADER) {
- LOGVAL_YANG(ctx, LY_VCODE_INORD, ly_stmt2str(kw), ly_stmt2str(prev_kw));
- return LY_EVALID;
- }
+ CHECK_ORDER(Y_MOD_MODULE_HEADER);
break;
/* linkage */
case YANG_INCLUDE:
case YANG_IMPORT:
- if (mod_stmt > Y_MOD_LINKAGE) {
- LOGVAL_YANG(ctx, LY_VCODE_INORD, ly_stmt2str(kw), ly_stmt2str(prev_kw));
- return LY_EVALID;
- }
- mod_stmt = Y_MOD_LINKAGE;
+ CHECK_ORDER(Y_MOD_LINKAGE);
break;
/* meta */
case YANG_ORGANIZATION:
case YANG_CONTACT:
case YANG_DESCRIPTION:
case YANG_REFERENCE:
- if (mod_stmt > Y_MOD_META) {
- LOGVAL_YANG(ctx, LY_VCODE_INORD, ly_stmt2str(kw), ly_stmt2str(prev_kw));
- return LY_EVALID;
- }
- mod_stmt = Y_MOD_META;
+ CHECK_ORDER(Y_MOD_META);
break;
/* revision */
case YANG_REVISION:
- if (mod_stmt > Y_MOD_REVISION) {
- LOGVAL_YANG(ctx, LY_VCODE_INORD, ly_stmt2str(kw), ly_stmt2str(prev_kw));
- return LY_EVALID;
- }
- mod_stmt = Y_MOD_REVISION;
+ CHECK_ORDER(Y_MOD_REVISION);
break;
-
/* body */
case YANG_ANYDATA:
case YANG_ANYXML:
@@ -4495,8 +4493,9 @@
/* error handled in the next switch */
break;
}
- prev_kw = kw;
+#undef CHECK_ORDER
+ prev_kw = kw;
switch (kw) {
/* module header */
case YANG_YANG_VERSION:
@@ -4507,6 +4506,7 @@
break;
case YANG_PREFIX:
ret = parse_text_field(ctx, data, LYEXT_SUBSTMT_PREFIX, 0, &mod->prefix, Y_IDENTIF_ARG, &mod->exts);
+ LY_CHECK_RET(lysp_check_prefix(ctx, mod, &mod->prefix), LY_EVALID);
break;
case YANG_BELONGS_TO:
ret = parse_belongsto(ctx, data, &mod->belongsto, &mod->prefix, &mod->exts);
@@ -4517,7 +4517,7 @@
ret = parse_include(ctx, data, &mod->includes);
break;
case YANG_IMPORT:
- ret = parse_import(ctx, data, &mod->imports);
+ ret = parse_import(ctx, data, mod);
break;
/* meta */
@@ -4629,7 +4629,7 @@
size_t word_len;
enum yang_keyword kw;
struct lysp_module *mod = NULL;
- struct ly_parser_ctx context;
+ struct ly_parser_ctx context = {0};
context.ctx = ctx;
context.line = 1;
@@ -4667,6 +4667,9 @@
}
assert(!buf);
+ /* make sure that the newest revision is at position 0 */
+ lysp_sort_revisions(mod->revs);
+
*mod_p = mod;
return ret;
diff --git a/src/set.h b/src/set.h
index 5834b8c..f16feae 100644
--- a/src/set.h
+++ b/src/set.h
@@ -28,8 +28,8 @@
*/
/**
- * @brief Structure to hold a set of (not necessary somehow connected) objects. Usually used for ::lyd_node
- * or ::lys_node objects, but it is not limited to them. Caller is supposed to not mix the type of objects
+ * @brief Structure to hold a set of (not necessary somehow connected) objects. Usually used for ::lyd_node,
+ * ::lysp_node or ::lysc_node objects, but it is not limited to them. Caller is supposed to not mix the type of objects
* added to the set and according to its knowledge about the set content, it can access objects via the members
* of the set union.
*
@@ -43,12 +43,7 @@
{
unsigned int size; /**< allocated size of the set array */
unsigned int count; /**< number of elements in (used size of) the set array */
- union
- {
- struct lys_node **schemas; /**< array of pointers to a ::lys_node objects */
- struct lyd_node **data; /**< array of pointers to a ::lyd_node objects */
- void **objs; /**< dummy array for generic work */
- }; /**< set array - union to simplify access to the stored objects */
+ void **objs; /**< set array of generic object pointers */
};
/**
@@ -76,7 +71,7 @@
struct ly_set *ly_set_dup(const struct ly_set *set, void *(*duplicator)(void *obj));
/**
- * @brief Add a ::lyd_node or ::lys_node object into the set
+ * @brief Add an object into the set
*
* Since it is a set, the function checks for duplicity and if the
* node is already in the set, the index of the previously added
@@ -129,7 +124,7 @@
* (the last object is placed instead of the removed object).
*
* @param[in] set Set from which the \p node will be removed.
- * @param[in] obejct The object to be removed from the \p set.
+ * @param[in] object The object to be removed from the \p set.
* @param[in] destructor Optional function to free the objects being removed.
* @return LY_ERR return value.
*/
diff --git a/src/tree_schema.c b/src/tree_schema.c
index 5f6a050..6275235 100644
--- a/src/tree_schema.c
+++ b/src/tree_schema.c
@@ -11,19 +11,38 @@
*
* https://opensource.org/licenses/BSD-3-Clause
*/
+#define _DEFAULT_SOURCE
+
+#include <errno.h>
+#include <fcntl.h>
+#include <linux/limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
#include "libyang.h"
#include "common.h"
+#include "context.h"
+#include "tree_schema_internal.h"
-#define FREE_ARRAY(CTX, ARRAY, ITER, FUNC) LY_ARRAY_FOR(ARRAY, ITER){FUNC(CTX, &ARRAY[ITER]);}free(ARRAY);
-#define FREE_MEMBER(CTX, MEMBER, FUNC) if (MEMBER) {FUNC(CTX, MEMBER);free(MEMBER);}
-#define FREE_STRING(CTX, STRING) if (STRING) {lydict_remove(CTX, STRING);}
+#define FREE_ARRAY(CTX, ARRAY, FUNC) {uint64_t c__; LY_ARRAY_FOR(ARRAY, c__){FUNC(CTX, LY_ARRAY_INDEX(ARRAY, c__), dict);}free(ARRAY);}
+#define FREE_MEMBER(CTX, MEMBER, FUNC) if (MEMBER) {FUNC(CTX, MEMBER, dict);free(MEMBER);}
+#define FREE_STRING(CTX, STRING) if (dict && STRING) {lydict_remove(CTX, STRING);}
-static void lysp_grp_free(struct ly_ctx *ctx, struct lysp_grp *grp);
-static void lysp_node_free(struct ly_ctx *ctx, struct lysp_node *node);
+static void lysp_grp_free(struct ly_ctx *ctx, struct lysp_grp *grp, int dict);
+static void lysp_node_free(struct ly_ctx *ctx, struct lysp_node *node, int dict);
+
+#define LYSC_CTX_BUFSIZE 4086
+struct lysc_ctx {
+ struct lysc_module *mod;
+ uint16_t path_len;
+ char path[LYSC_CTX_BUFSIZE];
+};
static void
-lysp_stmt_free(struct ly_ctx *ctx, struct lysp_stmt *stmt)
+lysp_stmt_free(struct ly_ctx *ctx, struct lysp_stmt *stmt, int dict)
{
struct lysp_stmt *child, *next;
@@ -31,14 +50,14 @@
FREE_STRING(ctx, stmt->arg);
LY_LIST_FOR_SAFE(stmt->child, next, child) {
- lysp_stmt_free(ctx, child);
+ lysp_stmt_free(ctx, child, dict);
}
free(stmt);
}
static void
-lysp_ext_instance_free(struct ly_ctx *ctx, struct lysp_ext_instance *ext)
+lysp_ext_instance_free(struct ly_ctx *ctx, struct lysp_ext_instance *ext, int dict)
{
struct lysp_stmt *stmt, *next;
@@ -46,54 +65,59 @@
FREE_STRING(ctx, ext->argument);
LY_LIST_FOR_SAFE(ext->child, next, stmt) {
- lysp_stmt_free(ctx, stmt);
+ lysp_stmt_free(ctx, stmt, dict);
}
}
static void
-lysp_import_free(struct ly_ctx *ctx, struct lysp_import *import)
+lysp_import_free(struct ly_ctx *ctx, struct lysp_import *import, int dict)
{
- unsigned int u;
-
FREE_STRING(ctx, import->name);
FREE_STRING(ctx, import->prefix);
FREE_STRING(ctx, import->dsc);
FREE_STRING(ctx, import->ref);
- FREE_ARRAY(ctx, import->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, import->exts, lysp_ext_instance_free);
+ {
+ void *p__;
+ int64_t c__;
+ for(p__ = ((void*)((uint32_t*)((import->exts) + 0) + 1)), c__ = 0;
+ (import->exts) && c__ < (*(uint32_t*)(import->exts));
+ p__ = ((void*)((uint32_t*)((import->exts) + c__) + 1))) {
+ lysp_ext_instance_free(ctx, p__, dict);
+ }
+ free(import->exts);
+ }
}
static void
-lysp_include_free(struct ly_ctx *ctx, struct lysp_include *include)
+lysp_include_free(struct ly_ctx *ctx, struct lysp_include *include, int dict)
{
- unsigned int u;
FREE_STRING(ctx, include->name);
FREE_STRING(ctx, include->dsc);
FREE_STRING(ctx, include->ref);
- FREE_ARRAY(ctx, include->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, include->exts, lysp_ext_instance_free);
}
static void
-lysp_revision_free(struct ly_ctx *ctx, struct lysp_revision *rev)
+lysp_revision_free(struct ly_ctx *ctx, struct lysp_revision *rev, int dict)
{
- unsigned int u;
FREE_STRING(ctx, rev->dsc);
FREE_STRING(ctx, rev->ref);
- FREE_ARRAY(ctx, rev->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, rev->exts, lysp_ext_instance_free);
}
static void
-lysp_ext_free(struct ly_ctx *ctx, struct lysp_ext *ext)
+lysp_ext_free(struct ly_ctx *ctx, struct lysp_ext *ext, int dict)
{
- unsigned int u;
FREE_STRING(ctx, ext->name);
FREE_STRING(ctx, ext->argument);
FREE_STRING(ctx, ext->dsc);
FREE_STRING(ctx, ext->ref);
- FREE_ARRAY(ctx, ext->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, ext->exts, lysp_ext_instance_free);
}
static void
-lysp_feature_free(struct ly_ctx *ctx, struct lysp_feature *feat)
+lysp_feature_free(struct ly_ctx *ctx, struct lysp_feature *feat, int dict)
{
unsigned int u;
FREE_STRING(ctx, feat->name);
@@ -103,11 +127,11 @@
free(feat->iffeatures);
FREE_STRING(ctx, feat->dsc);
FREE_STRING(ctx, feat->ref);
- FREE_ARRAY(ctx, feat->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, feat->exts, lysp_ext_instance_free);
}
static void
-lysp_ident_free(struct ly_ctx *ctx, struct lysp_ident *ident)
+lysp_ident_free(struct ly_ctx *ctx, struct lysp_ident *ident, int dict)
{
unsigned int u;
FREE_STRING(ctx, ident->name);
@@ -121,23 +145,22 @@
free(ident->bases);
FREE_STRING(ctx, ident->dsc);
FREE_STRING(ctx, ident->ref);
- FREE_ARRAY(ctx, ident->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, ident->exts, lysp_ext_instance_free);
}
static void
-lysp_restr_free(struct ly_ctx *ctx, struct lysp_restr *restr)
+lysp_restr_free(struct ly_ctx *ctx, struct lysp_restr *restr, int dict)
{
- unsigned int u;
FREE_STRING(ctx, restr->arg);
FREE_STRING(ctx, restr->emsg);
FREE_STRING(ctx, restr->eapptag);
FREE_STRING(ctx, restr->dsc);
FREE_STRING(ctx, restr->ref);
- FREE_ARRAY(ctx, restr->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, restr->exts, lysp_ext_instance_free);
}
static void
-lysp_type_enum_free(struct ly_ctx *ctx, struct lysp_type_enum *item)
+lysp_type_enum_free(struct ly_ctx *ctx, struct lysp_type_enum *item, int dict)
{
unsigned int u;
FREE_STRING(ctx, item->name);
@@ -147,59 +170,57 @@
FREE_STRING(ctx, item->iffeatures[u]);
}
free(item->iffeatures);
- FREE_ARRAY(ctx, item->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, item->exts, lysp_ext_instance_free);
}
static void
-lysp_type_free(struct ly_ctx *ctx, struct lysp_type *type)
+lysp_type_free(struct ly_ctx *ctx, struct lysp_type *type, int dict)
{
unsigned int u;
FREE_STRING(ctx, type->name);
FREE_MEMBER(ctx, type->range, lysp_restr_free);
FREE_MEMBER(ctx, type->length, lysp_restr_free);
- FREE_ARRAY(ctx, type->patterns, u, lysp_restr_free);
- FREE_ARRAY(ctx, type->enums, u, lysp_type_enum_free);
- FREE_ARRAY(ctx, type->bits, u, lysp_type_enum_free);
+ FREE_ARRAY(ctx, type->patterns, lysp_restr_free);
+ FREE_ARRAY(ctx, type->enums, lysp_type_enum_free);
+ FREE_ARRAY(ctx, type->bits, lysp_type_enum_free);
FREE_STRING(ctx, type->path);
for (u = 0; type->bases && type->bases[u]; ++u) {
FREE_STRING(ctx, type->bases[u]);
}
free(type->bases);
- FREE_ARRAY(ctx, type->types, u, lysp_type_free);
- FREE_ARRAY(ctx, type->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, type->types, lysp_type_free);
+ FREE_ARRAY(ctx, type->exts, lysp_ext_instance_free);
}
static void
-lysp_tpdf_free(struct ly_ctx *ctx, struct lysp_tpdf *tpdf)
+lysp_tpdf_free(struct ly_ctx *ctx, struct lysp_tpdf *tpdf, int dict)
{
- unsigned int u;
FREE_STRING(ctx, tpdf->name);
FREE_STRING(ctx, tpdf->units);
FREE_STRING(ctx, tpdf->dflt);
FREE_STRING(ctx, tpdf->dsc);
FREE_STRING(ctx, tpdf->ref);
- FREE_ARRAY(ctx, tpdf->exts, u, lysp_ext_instance_free);
- lysp_type_free(ctx, &tpdf->type);
+ FREE_ARRAY(ctx, tpdf->exts, lysp_ext_instance_free);
+ lysp_type_free(ctx, &tpdf->type, dict);
}
static void
-lysp_action_inout_free(struct ly_ctx *ctx, struct lysp_action_inout *inout)
+lysp_action_inout_free(struct ly_ctx *ctx, struct lysp_action_inout *inout, int dict)
{
- unsigned int u;
struct lysp_node *node, *next;
- FREE_ARRAY(ctx, inout->musts, u, lysp_restr_free);
- FREE_ARRAY(ctx, inout->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, inout->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, inout->musts, lysp_restr_free);
+ FREE_ARRAY(ctx, inout->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, inout->groupings, lysp_grp_free);
LY_LIST_FOR_SAFE(inout->data, next, node) {
- lysp_node_free(ctx, node);
+ lysp_node_free(ctx, node, dict);
}
- FREE_ARRAY(ctx, inout->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, inout->exts, lysp_ext_instance_free);
}
static void
-lysp_action_free(struct ly_ctx *ctx, struct lysp_action *action)
+lysp_action_free(struct ly_ctx *ctx, struct lysp_action *action, int dict)
{
unsigned int u;
FREE_STRING(ctx, action->name);
@@ -209,15 +230,15 @@
FREE_STRING(ctx, action->iffeatures[u]);
}
free(action->iffeatures);
- FREE_ARRAY(ctx, action->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, action->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, action->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, action->groupings, lysp_grp_free);
FREE_MEMBER(ctx, action->input, lysp_action_inout_free);
FREE_MEMBER(ctx, action->output, lysp_action_inout_free);
- FREE_ARRAY(ctx, action->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, action->exts, lysp_ext_instance_free);
}
static void
-lysp_notif_free(struct ly_ctx *ctx, struct lysp_notif *notif)
+lysp_notif_free(struct ly_ctx *ctx, struct lysp_notif *notif, int dict)
{
unsigned int u;
struct lysp_node *node, *next;
@@ -229,46 +250,44 @@
FREE_STRING(ctx, notif->iffeatures[u]);
}
free(notif->iffeatures);
- FREE_ARRAY(ctx, notif->musts, u, lysp_restr_free);
- FREE_ARRAY(ctx, notif->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, notif->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, notif->musts, lysp_restr_free);
+ FREE_ARRAY(ctx, notif->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, notif->groupings, lysp_grp_free);
LY_LIST_FOR_SAFE(notif->data, next, node) {
- lysp_node_free(ctx, node);
+ lysp_node_free(ctx, node, dict);
}
- FREE_ARRAY(ctx, notif->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, notif->exts, lysp_ext_instance_free);
}
static void
-lysp_grp_free(struct ly_ctx *ctx, struct lysp_grp *grp)
+lysp_grp_free(struct ly_ctx *ctx, struct lysp_grp *grp, int dict)
{
- unsigned int u;
struct lysp_node *node, *next;
FREE_STRING(ctx, grp->name);
FREE_STRING(ctx, grp->dsc);
FREE_STRING(ctx, grp->ref);
- FREE_ARRAY(ctx, grp->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, grp->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, grp->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, grp->groupings, lysp_grp_free);
LY_LIST_FOR_SAFE(grp->data, next, node) {
- lysp_node_free(ctx, node);
+ lysp_node_free(ctx, node, dict);
}
- FREE_ARRAY(ctx, grp->actions, u, lysp_action_free);
- FREE_ARRAY(ctx, grp->notifs, u, lysp_notif_free);
- FREE_ARRAY(ctx, grp->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, grp->actions, lysp_action_free);
+ FREE_ARRAY(ctx, grp->notifs, lysp_notif_free);
+ FREE_ARRAY(ctx, grp->exts, lysp_ext_instance_free);
}
static void
-lysp_when_free(struct ly_ctx *ctx, struct lysp_when *when)
+lysp_when_free(struct ly_ctx *ctx, struct lysp_when *when, int dict)
{
- unsigned int u;
FREE_STRING(ctx, when->cond);
FREE_STRING(ctx, when->dsc);
FREE_STRING(ctx, when->ref);
- FREE_ARRAY(ctx, when->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, when->exts, lysp_ext_instance_free);
}
static void
-lysp_augment_free(struct ly_ctx *ctx, struct lysp_augment *augment)
+lysp_augment_free(struct ly_ctx *ctx, struct lysp_augment *augment, int dict)
{
unsigned int u;
struct lysp_node *node, *next;
@@ -282,21 +301,21 @@
}
free(augment->iffeatures);
LY_LIST_FOR_SAFE(augment->child, next, node) {
- lysp_node_free(ctx, node);
+ lysp_node_free(ctx, node, dict);
}
- FREE_ARRAY(ctx, augment->actions, u, lysp_action_free);
- FREE_ARRAY(ctx, augment->notifs, u, lysp_notif_free);
- FREE_ARRAY(ctx, augment->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, augment->actions, lysp_action_free);
+ FREE_ARRAY(ctx, augment->notifs, lysp_notif_free);
+ FREE_ARRAY(ctx, augment->exts, lysp_ext_instance_free);
}
static void
-lysp_deviate_free(struct ly_ctx *ctx, struct lysp_deviate *d)
+lysp_deviate_free(struct ly_ctx *ctx, struct lysp_deviate *d, int dict)
{
unsigned int u;
struct lysp_deviate_add *add = (struct lysp_deviate_add*)d;
struct lysp_deviate_rpl *rpl = (struct lysp_deviate_rpl*)d;
- FREE_ARRAY(ctx, d->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, d->exts, lysp_ext_instance_free);
switch(d->mod) {
case LYS_DEV_NOT_SUPPORTED:
/* nothing to do */
@@ -304,7 +323,7 @@
case LYS_DEV_ADD:
case LYS_DEV_DELETE: /* compatible for dynamically allocated data */
FREE_STRING(ctx, add->units);
- FREE_ARRAY(ctx, add->musts, u, lysp_restr_free);
+ FREE_ARRAY(ctx, add->musts, lysp_restr_free);
for (u = 0; add->uniques && add->uniques[u]; ++u) {
FREE_STRING(ctx, add->uniques[u]);
}
@@ -326,22 +345,22 @@
}
static void
-lysp_deviation_free(struct ly_ctx *ctx, struct lysp_deviation *dev)
+lysp_deviation_free(struct ly_ctx *ctx, struct lysp_deviation *dev, int dict)
{
- unsigned int u;
struct lysp_deviate *next, *iter;
FREE_STRING(ctx, dev->nodeid);
FREE_STRING(ctx, dev->dsc);
FREE_STRING(ctx, dev->ref);
LY_LIST_FOR_SAFE(dev->deviates, next, iter) {
- lysp_deviate_free(ctx, iter);
+ lysp_deviate_free(ctx, iter, dict);
+ free(iter);
}
- FREE_ARRAY(ctx, dev->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, dev->exts, lysp_ext_instance_free);
}
static void
-lysp_refine_free(struct ly_ctx *ctx, struct lysp_refine *ref)
+lysp_refine_free(struct ly_ctx *ctx, struct lysp_refine *ref, int dict)
{
unsigned int u;
FREE_STRING(ctx, ref->nodeid);
@@ -351,17 +370,17 @@
FREE_STRING(ctx, ref->iffeatures[u]);
}
free(ref->iffeatures);
- FREE_ARRAY(ctx, ref->musts, u, lysp_restr_free);
+ FREE_ARRAY(ctx, ref->musts, lysp_restr_free);
FREE_STRING(ctx, ref->presence);
for (u = 0; ref->dflts && ref->dflts[u]; ++u) {
FREE_STRING(ctx, ref->dflts[u]);
}
free(ref->dflts);
- FREE_ARRAY(ctx, ref->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, ref->exts, lysp_ext_instance_free);
}
static void
-lysp_node_free(struct ly_ctx *ctx, struct lysp_node *node)
+lysp_node_free(struct ly_ctx *ctx, struct lysp_node *node, int dict)
{
unsigned int u;
struct lysp_node *child, *next;
@@ -374,29 +393,29 @@
FREE_STRING(ctx, node->iffeatures[u]);
}
free(node->iffeatures);
- FREE_ARRAY(ctx, node->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, node->exts, lysp_ext_instance_free);
switch(node->nodetype) {
case LYS_CONTAINER:
- FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->musts, u, lysp_restr_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->musts, lysp_restr_free);
FREE_STRING(ctx, ((struct lysp_node_container*)node)->presence);
- FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->groupings, lysp_grp_free);
LY_LIST_FOR_SAFE(((struct lysp_node_container*)node)->child, next, child) {
- lysp_node_free(ctx, child);
+ lysp_node_free(ctx, child, dict);
}
- FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->actions, u, lysp_action_free);
- FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->notifs, u, lysp_notif_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->actions, lysp_action_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_container*)node)->notifs, lysp_notif_free);
break;
case LYS_LEAF:
- FREE_ARRAY(ctx, ((struct lysp_node_leaf*)node)->musts, u, lysp_restr_free);
- lysp_type_free(ctx, &((struct lysp_node_leaf*)node)->type);
+ FREE_ARRAY(ctx, ((struct lysp_node_leaf*)node)->musts, lysp_restr_free);
+ lysp_type_free(ctx, &((struct lysp_node_leaf*)node)->type, dict);
FREE_STRING(ctx, ((struct lysp_node_leaf*)node)->units);
FREE_STRING(ctx, ((struct lysp_node_leaf*)node)->dflt);
break;
case LYS_LEAFLIST:
- FREE_ARRAY(ctx, ((struct lysp_node_leaflist*)node)->musts, u, lysp_restr_free);
- lysp_type_free(ctx, &((struct lysp_node_leaflist*)node)->type);
+ FREE_ARRAY(ctx, ((struct lysp_node_leaflist*)node)->musts, lysp_restr_free);
+ lysp_type_free(ctx, &((struct lysp_node_leaflist*)node)->type, dict);
FREE_STRING(ctx, ((struct lysp_node_leaflist*)node)->units);
for (u = 0; ((struct lysp_node_leaflist*)node)->dflts && ((struct lysp_node_leaflist*)node)->dflts[u]; ++u) {
FREE_STRING(ctx, ((struct lysp_node_leaflist*)node)->dflts[u]);
@@ -404,15 +423,15 @@
free(((struct lysp_node_leaflist*)node)->dflts);
break;
case LYS_LIST:
- FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->musts, u, lysp_restr_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->musts, lysp_restr_free);
FREE_STRING(ctx, ((struct lysp_node_list*)node)->key);
- FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->groupings, lysp_grp_free);
LY_LIST_FOR_SAFE(((struct lysp_node_list*)node)->child, next, child) {
- lysp_node_free(ctx, child);
+ lysp_node_free(ctx, child, dict);
}
- FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->actions, u, lysp_action_free);
- FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->notifs, u, lysp_notif_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->actions, lysp_action_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_list*)node)->notifs, lysp_notif_free);
for (u = 0; ((struct lysp_node_list*)node)->uniques && ((struct lysp_node_list*)node)->uniques[u]; ++u) {
FREE_STRING(ctx, ((struct lysp_node_list*)node)->uniques[u]);
}
@@ -420,22 +439,22 @@
break;
case LYS_CHOICE:
LY_LIST_FOR_SAFE(((struct lysp_node_choice*)node)->child, next, child) {
- lysp_node_free(ctx, child);
+ lysp_node_free(ctx, child, dict);
}
FREE_STRING(ctx, ((struct lysp_node_choice*)node)->dflt);
break;
case LYS_CASE:
LY_LIST_FOR_SAFE(((struct lysp_node_case*)node)->child, next, child) {
- lysp_node_free(ctx, child);
+ lysp_node_free(ctx, child, dict);
}
break;
case LYS_ANYDATA:
case LYS_ANYXML:
- FREE_ARRAY(ctx, ((struct lysp_node_anydata*)node)->musts, u, lysp_restr_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_anydata*)node)->musts, lysp_restr_free);
break;
case LYS_USES:
- FREE_ARRAY(ctx, ((struct lysp_node_uses*)node)->refines, u, lysp_refine_free);
- FREE_ARRAY(ctx, ((struct lysp_node_uses*)node)->augments, u, lysp_augment_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_uses*)node)->refines, lysp_refine_free);
+ FREE_ARRAY(ctx, ((struct lysp_node_uses*)node)->augments, lysp_augment_free);
break;
default:
LOGINT(ctx);
@@ -444,11 +463,10 @@
free(node);
}
-API void
-lysp_module_free(struct lysp_module *module)
+static void
+lysp_module_free_(struct lysp_module *module, int dict)
{
struct ly_ctx *ctx;
- unsigned int u;
struct lysp_node *node, *next;
LY_CHECK_ARG_RET(NULL, module,);
@@ -459,29 +477,357 @@
FREE_STRING(ctx, module->ns); /* or belongs-to */
FREE_STRING(ctx, module->prefix);
- FREE_ARRAY(ctx, module->imports, u, lysp_import_free);
- FREE_ARRAY(ctx, module->includes, u, lysp_include_free);
+ FREE_ARRAY(ctx, module->imports, lysp_import_free);
+ FREE_ARRAY(ctx, module->includes, lysp_include_free);
FREE_STRING(ctx, module->org);
FREE_STRING(ctx, module->contact);
FREE_STRING(ctx, module->dsc);
FREE_STRING(ctx, module->ref);
- FREE_ARRAY(ctx, module->revs, u, lysp_revision_free);
- FREE_ARRAY(ctx, module->extensions, u, lysp_ext_free);
- FREE_ARRAY(ctx, module->features, u, lysp_feature_free);
- FREE_ARRAY(ctx, module->identities, u, lysp_ident_free);
- FREE_ARRAY(ctx, module->typedefs, u, lysp_tpdf_free);
- FREE_ARRAY(ctx, module->groupings, u, lysp_grp_free);
+ FREE_ARRAY(ctx, module->revs, lysp_revision_free);
+ FREE_ARRAY(ctx, module->extensions, lysp_ext_free);
+ FREE_ARRAY(ctx, module->features, lysp_feature_free);
+ FREE_ARRAY(ctx, module->identities, lysp_ident_free);
+ FREE_ARRAY(ctx, module->typedefs, lysp_tpdf_free);
+ FREE_ARRAY(ctx, module->groupings, lysp_grp_free);
LY_LIST_FOR_SAFE(module->data, next, node) {
- lysp_node_free(ctx, node);
+ lysp_node_free(ctx, node, dict);
}
- FREE_ARRAY(ctx, module->augments, u, lysp_augment_free);
- FREE_ARRAY(ctx, module->rpcs, u, lysp_action_free);
- FREE_ARRAY(ctx, module->notifs, u, lysp_notif_free);
- FREE_ARRAY(ctx, module->deviations, u, lysp_deviation_free);
- FREE_ARRAY(ctx, module->exts, u, lysp_ext_instance_free);
+ FREE_ARRAY(ctx, module->augments, lysp_augment_free);
+ FREE_ARRAY(ctx, module->rpcs, lysp_action_free);
+ FREE_ARRAY(ctx, module->notifs, lysp_notif_free);
+ FREE_ARRAY(ctx, module->deviations, lysp_deviation_free);
+ FREE_ARRAY(ctx, module->exts, lysp_ext_instance_free);
+
+ free(module);
+}
+
+API void
+lysp_module_free(struct lysp_module *module)
+{
+ lysp_module_free_(module, 1);
+}
+
+static void
+lysc_feature_free(struct ly_ctx *ctx, struct lysc_feature *feat, int dict)
+{
+ FREE_STRING(ctx, feat->name);
+
+}
+
+static void
+lysc_module_free_(struct lysc_module *module, int dict)
+{
+ struct ly_ctx *ctx;
+
+ LY_CHECK_ARG_RET(NULL, module,);
+ ctx = module->ctx;
+
+ FREE_STRING(ctx, module->name);
+ FREE_STRING(ctx, module->ns);
+ FREE_STRING(ctx, module->prefix);
+
+
+ FREE_ARRAY(ctx, module->features, lysc_feature_free);
free(module);
}
+
+API void
+lysc_module_free(struct lysc_module *module, void (*private_destructor)(const struct lysc_node *node, void *priv))
+{
+ lysc_module_free_(module, 1);
+}
+
+void
+lys_module_free(struct lys_module *module, void (*private_destructor)(const struct lysc_node *node, void *priv))
+{
+ if (!module) {
+ return;
+ }
+
+ lysc_module_free(module->compiled, private_destructor);
+ lysp_module_free(module->parsed);
+ free(module);
+}
+
+static LY_ERR
+lys_compile_iffeature(struct lysc_ctx *ctx, const char *iff_p, struct lysc_iffeature **iffeatures)
+{
+ struct lysc_iffeature *iff;
+
+ if ((ctx->mod->version != 2) && ((iff_p[0] == '(') || strchr(iff_p, ' '))) {
+ LOGVAL(ctx->mod->ctx, LY_VLOG_STR, ctx->path,LY_VCODE_INVAL, strlen(iff_p), iff_p, "if-feature");
+ return LY_EVALID;
+ }
+
+ LYSP_ARRAY_NEW_RET(ctx->mod->ctx, *iffeatures, iff, LY_EMEM);
+
+ return LY_SUCCESS;
+}
+
+static LY_ERR
+lys_compile_feature(struct lysc_ctx *ctx, struct lysp_feature *feature_p, int options, struct lysc_feature **features)
+{
+ struct lysc_feature *feature;
+ unsigned int u;
+ LY_ERR ret;
+
+ LYSP_ARRAY_NEW_RET(ctx->mod->ctx, *features, feature, LY_EMEM);
+
+ if (options & LYSC_OPT_FREE_SP) {
+ /* just switch the pointers */
+ feature->name = feature_p->name;
+ } else {
+ /* keep refcounts correct for lysp_module_free() */
+ feature->name = lydict_insert(ctx->mod->ctx, feature_p->name, 0);
+ }
+ feature->flags = feature_p->flags;
+
+ for (u = 0; feature_p->iffeatures && feature_p->iffeatures[u]; ++u) {
+ ret = lys_compile_iffeature(ctx, feature_p->iffeatures[u], &feature->iffeatures);
+ LY_CHECK_RET(ret);
+ }
+
+ return LY_SUCCESS;
+}
+
+LY_ERR
+lys_compile(struct lysp_module *sp, int options, struct lysc_module **sc)
+{
+ struct lysc_ctx ctx = {0};
+ struct lysc_module *mod_c;
+ void *p;
+ LY_ERR ret;
+
+ LY_CHECK_ARG_RET(NULL, sc, sp, sp->ctx, LY_EINVAL);
+
+ if (sp->submodule) {
+ LOGERR(sp->ctx, LY_EINVAL, "Submodules (%s) are not supposed to be compiled, compile only the main modules.", sp->name);
+ return LY_EINVAL;
+ }
+
+ ctx.mod = mod_c = calloc(1, sizeof *mod_c);
+ LY_CHECK_ERR_RET(!mod_c, LOGMEM(sp->ctx), LY_EMEM);
+ mod_c->ctx = sp->ctx;
+ mod_c->version = sp->version;
+
+ if (options & LYSC_OPT_FREE_SP) {
+ /* just switch the pointers */
+ mod_c->name = sp->name;
+ mod_c->ns = sp->ns;
+ mod_c->prefix = sp->prefix;
+ } else {
+ /* keep refcounts correct for lysp_module_free() */
+ mod_c->name = lydict_insert(sp->ctx, sp->name, 0);
+ mod_c->ns = lydict_insert(sp->ctx, sp->ns, 0);
+ mod_c->prefix = lydict_insert(sp->ctx, sp->prefix, 0);
+ }
+
+ if (sp->features) {
+ LY_ARRAY_FOR(sp->features, struct lysp_feature, p) {
+ ret = lys_compile_feature(&ctx, p, options, &mod_c->features);
+ LY_CHECK_GOTO(ret != LY_SUCCESS, error);
+ }
+ }
+
+ if (options & LYSC_OPT_FREE_SP) {
+ lysp_module_free_(sp, 0);
+ }
+
+ (*sc) = mod_c;
+ return LY_SUCCESS;
+
+error:
+
+ if (options & LYSC_OPT_FREE_SP) {
+ lysc_module_free_(mod_c, 0);
+ } else {
+ lysc_module_free_(mod_c, 1);
+ }
+ return ret;
+}
+
+const struct lys_module *
+lys_parse_mem_(struct ly_ctx *ctx, const char *data, LYS_INFORMAT format, const char *revision, int implement)
+{
+ struct lys_module *mod = NULL;
+ LY_ERR ret;
+
+ LY_CHECK_ARG_RET(ctx, ctx, data, NULL);
+
+ mod = calloc(1, sizeof *mod);
+ LY_CHECK_ERR_RET(!mod, LOGMEM(ctx), NULL);
+
+ switch (format) {
+ case LYS_IN_YIN:
+ /* TODO not yet supported
+ mod = yin_read_module(ctx, data, revision, implement);
+ */
+ break;
+ case LYS_IN_YANG:
+ ret = yang_parse(ctx, data, &mod->parsed);
+ LY_CHECK_RET(ret, NULL);
+ break;
+ default:
+ LOGERR(ctx, LY_EINVAL, "Invalid schema input format.");
+ break;
+ }
+
+ if (implement) {
+ mod->parsed->implemented = 1;
+ }
+
+ if (revision) {
+ /* check revision of the parsed model */
+ if (!mod->parsed->revs || strcmp(revision, LY_ARRAY_INDEX(mod->parsed->revs, 0, struct lysp_revision)->rev)) {
+ LOGERR(ctx, LY_EINVAL, "Module \"%s\" parsed with the wrong revision (\"%s\" instead \"%s\").",
+ mod->parsed->name, LY_ARRAY_INDEX(mod->parsed->revs, 0, struct lysp_revision)->rev, revision);
+ lysp_module_free(mod->parsed);
+ free(mod);
+ return NULL;
+ }
+ }
+
+ /* check for duplicity in the context */
+
+ /* add into context */
+ ly_set_add(&ctx->list, mod, LY_SET_OPT_USEASLIST);
+
+#if 0
+ /* hack for NETCONF's edit-config's operation attribute. It is not defined in the schema, but since libyang
+ * implements YANG metadata (annotations), we need its definition. Because the ietf-netconf schema is not the
+ * internal part of libyang, we cannot add the annotation into the schema source, but we do it here to have
+ * the anotation definitions available in the internal schema structure. There is another hack in schema
+ * printers to do not print this internally added annotation. */
+ if (mod && ly_strequal(mod->name, "ietf-netconf", 0)) {
+ if (lyp_add_ietf_netconf_annotations(mod)) {
+ lys_free(mod, NULL, 1, 1);
+ return NULL;
+ }
+ }
+#endif
+
+ return mod;
+}
+
+API const struct lys_module *
+lys_parse_mem(struct ly_ctx *ctx, const char *data, LYS_INFORMAT format)
+{
+ return lys_parse_mem_(ctx, data, format, NULL, 1);
+}
+
+static void
+lys_parse_set_filename(struct ly_ctx *ctx, const char **filename, int fd)
+{
+#ifdef __APPLE__
+ char path[MAXPATHLEN];
+#else
+ int len;
+ char path[PATH_MAX], proc_path[32];
+#endif
+
+#ifdef __APPLE__
+ if (fcntl(fd, F_GETPATH, path) != -1) {
+ *filename = lydict_insert(ctx, path, 0);
+ }
+#else
+ /* get URI if there is /proc */
+ sprintf(proc_path, "/proc/self/fd/%d", fd);
+ if ((len = readlink(proc_path, path, PATH_MAX - 1)) > 0) {
+ *filename = lydict_insert(ctx, path, len);
+ }
+#endif
+}
+
+const struct lys_module *
+lys_parse_fd_(struct ly_ctx *ctx, int fd, LYS_INFORMAT format, const char *revision, int implement)
+{
+ const struct lys_module *mod;
+ size_t length;
+ char *addr;
+
+ LY_CHECK_ARG_RET(ctx, ctx, NULL);
+ if (fd < 0) {
+ LOGARG(ctx, fd);
+ return NULL;
+ }
+
+ LY_CHECK_RET(ly_mmap(ctx, fd, &length, (void **)&addr), NULL);
+ if (!addr) {
+ LOGERR(ctx, LY_EINVAL, "Empty schema file.");
+ return NULL;
+ }
+
+ mod = lys_parse_mem_(ctx, addr, format, revision, implement);
+ ly_munmap(addr, length);
+
+ if (mod && !mod->parsed->filepath) {
+ lys_parse_set_filename(ctx, &mod->parsed->filepath, fd);
+ }
+
+ return mod;
+}
+
+API const struct lys_module *
+lys_parse_fd(struct ly_ctx *ctx, int fd, LYS_INFORMAT format)
+{
+ return lys_parse_fd_(ctx, fd, format, NULL, 1);
+}
+
+API const struct lys_module *
+lys_parse_path(struct ly_ctx *ctx, const char *path, LYS_INFORMAT format)
+{
+ int fd;
+ const struct lys_module *mod;
+ const char *rev, *dot, *filename;
+ size_t len;
+
+ LY_CHECK_ARG_RET(ctx, ctx, path, NULL);
+
+ fd = open(path, O_RDONLY);
+ LY_CHECK_ERR_RET(fd == -1, LOGERR(ctx, LY_ESYS, "Opening file \"%s\" failed (%s).", path, strerror(errno)), NULL);
+
+ mod = lys_parse_fd(ctx, fd, format);
+ close(fd);
+ LY_CHECK_RET(!mod, NULL);
+
+ /* check that name and revision match filename */
+ filename = strrchr(path, '/');
+ if (!filename) {
+ filename = path;
+ } else {
+ filename++;
+ }
+ rev = strchr(filename, '@');
+ dot = strrchr(filename, '.');
+
+ /* name */
+ len = strlen(mod->parsed->name);
+ if (strncmp(filename, mod->parsed->name, len) ||
+ ((rev && rev != &filename[len]) || (!rev && dot != &filename[len]))) {
+ LOGWRN(ctx, "File name \"%s\" does not match module name \"%s\".", filename, mod->parsed->name);
+ }
+ if (rev) {
+ len = dot - ++rev;
+ if (!mod->parsed->revs || len != 10 || strncmp(LY_ARRAY_INDEX(mod->parsed->revs, 0, struct lysp_revision)->rev, rev, len)) {
+ LOGWRN(ctx, "File name \"%s\" does not match module revision \"%s\".", filename,
+ mod->parsed->revs ? LY_ARRAY_INDEX(mod->parsed->revs, 0, struct lysp_revision)->rev : "none");
+ }
+ }
+
+ if (!mod->parsed->filepath) {
+ /* store URI */
+ char rpath[PATH_MAX];
+ if (realpath(path, rpath) != NULL) {
+ mod->parsed->filepath = lydict_insert(ctx, rpath, 0);
+ } else {
+ mod->parsed->filepath = lydict_insert(ctx, path, 0);
+ }
+ }
+
+ return mod;
+}
+
diff --git a/src/tree_schema.h b/src/tree_schema.h
index 8aa9cb4..cee90f5 100644
--- a/src/tree_schema.h
+++ b/src/tree_schema.h
@@ -17,6 +17,59 @@
#include <stdint.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief XPath representation.
+ */
+struct lyxp_expr;
+
+/**
+ * @brief Macro selector for other LY_ARRAY_* macros, do not use directly!
+ */
+#define LY_ARRAY_SELECT(_1, _2, NAME, ...) NAME
+
+/**
+ * @brief Get void pointer to the item on the INDEX in the ARRAY
+ */
+#define LY_ARRAY_INDEX1(ARRAY, INDEX) ((void*)((uint32_t*)((ARRAY) + INDEX) + 1))
+
+/**
+ * @brief Get the TYPE pointer to the item on the INDEX in the ARRAY
+ */
+#define LY_ARRAY_INDEX2(ARRAY, INDEX, TYPE) ((TYPE*)((uint32_t*)((ARRAY) + INDEX) + 1))
+
+/**
+ * @brief Helper macro to go through sized-arrays with a pointer iterator.
+ *
+ * Use with opening curly bracket (`{`).
+ *
+ * @param[in] ARRAY Array to go through
+ * @param[in] TYPE Type of the records in the ARRAY
+ * @param[out] ITER Iterating pointer to the item being processed in each loop
+ */
+#define LY_ARRAY_FOR_ITER(ARRAY, TYPE, ITER) \
+ for (ITER = LY_ARRAY_INDEX1(ARRAY, 0); \
+ (ARRAY) && ((void*)ITER - (void*)ARRAY - sizeof(uint32_t))/(sizeof(TYPE)) < (*(uint32_t*)(ARRAY)); \
+ ITER = (void*)((TYPE*)ITER + 1))
+
+/**
+ * @brief Helper macro to go through sized-arrays with a numeric iterator.
+ *
+ * Use with opening curly bracket (`{`).
+ *
+ * To access an item with the INDEX value, use always LY_ARRAY_INDEX macro!
+ *
+ * @param[in] ARRAY Array to go through
+ * @param[out] INDEX Iterating index of the item being processed in each loop
+ */
+#define LY_ARRAY_FOR_INDEX(ARRAY, INDEX) \
+ for (INDEX = 0; \
+ ARRAY && INDEX < (*((uint32_t*)(ARRAY))); \
+ ++INDEX)
+
/**
* @defgroup schematree Schema Tree
* @{
@@ -25,14 +78,38 @@
*/
/**
- * @brief Helper macro to go through 0-terminated arrays
+ * @brief Get (optionally TYPEd) pointer to the item on the INDEX in the ARRAY
*
- * Use with opening curly bracket '{'.
- *
- * @param[in] ARRAY Array to go through
- * @param[out] ITER Numeric iterator storing available indexes of the ARRAY
+ * LY_ARRAY_INDEX(ARRAY, INDEX [, TYPE])
*/
-#define LY_ARRAY_FOR(ARRAY, ITER) for (ITER = 0; (ARRAY) && *((uint8_t *)((ARRAY) + ITER)); ++ITER)
+#define LY_ARRAY_INDEX(ARRAY, ...) LY_ARRAY_SELECT(__VA_ARGS__, LY_ARRAY_INDEX2, LY_ARRAY_INDEX1)(ARRAY, __VA_ARGS__)
+
+/**
+ * @brief Get a number of records in the ARRAY.
+ *
+ * Does not check if array exists!
+ */
+#define LY_ARRAY_SIZE(ARRAY) (*((uint32_t*)(ARRAY)))
+
+/**
+ * @brief Sized-array iterator (for-loop).
+ *
+ * Use with opening curly bracket (`{`).
+ *
+ * There are 2 variants:
+ *
+ * LY_ARRAY_FOR(ARRAY, TYPE, ITER)
+ *
+ * Where ARRAY is a sized-array to go through, TYPE is the type of the items in the ARRAY and ITER is a pointer variable
+ * providing the items of the ARRAY in the loops. This functionality is provided by LY_ARRAY_FOR_ITER macro
+ *
+ * LY_ARRAY_FOR(ARRAY, INDEX)
+ *
+ * The ARRAY is again a sized-array to go through, the INDEX is a variable (unsigned integer) for storing iterating ARRAY's index
+ * to access the items of ARRAY in the loops. The INDEX is supposed to be used via LY_ARRAY_INDEX macro which can provide the item
+ * in the loop body. This functionality is provided by LY_ARRAY_FOR_INDEX macro.
+ */
+#define LY_ARRAY_FOR(ARRAY, ...) LY_ARRAY_SELECT(__VA_ARGS__, LY_ARRAY_FOR_ITER, LY_ARRAY_FOR_INDEX)(ARRAY, __VA_ARGS__)
/**
* @brief Macro to iterate via all sibling elements without affecting the list itself
@@ -40,7 +117,7 @@
* Works for all types of nodes despite it is data or schema tree, but all the
* parameters must be pointers to the same type.
*
- * Use with opening curly bracket '{'. All parameters must be of the same type.
+ * Use with opening curly bracket (`{`). All parameters must be of the same type.
*
* @param START Pointer to the starting element.
* @param ELEM Iterator.
@@ -54,7 +131,7 @@
* @ingroup datatree
* @brief Macro to iterate via all sibling elements allowing to modify the list itself (e.g. removing elements)
*
- * Use with opening curly bracket '{'. All parameters must be of the same type.
+ * Use with opening curly bracket (`{`). All parameters must be of the same type.
*
* @param START Pointer to the starting element.
* @param NEXT Temporary storage to allow removing of the current iterator content.
@@ -107,7 +184,7 @@
const char *prefix; /**< prefix for the data from the imported schema (mandatory) */
const char *dsc; /**< description */
const char *ref; /**< reference */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
char rev[LY_REV_SIZE]; /**< revision-date of the imported module */
};
@@ -118,7 +195,7 @@
const char *name; /**< name of the submodule to include (mandatory) */
const char *dsc; /**< description */
const char *ref; /**< reference */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
char rev[LY_REV_SIZE]; /**< revision-date of the included submodule */
};
@@ -130,7 +207,7 @@
const char *argument; /**< argument name, NULL if not specified */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< LYS_STATUS_* and LYS_YINELEM values (@ref snodeflags) */
};
@@ -214,7 +291,7 @@
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_* values allowed */
};
@@ -227,7 +304,7 @@
const char **bases; /**< list of base identifiers (NULL-terminated) */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_ values are allowed */
};
@@ -242,7 +319,7 @@
const char *eapptag; /**< error-app-tag value */
const char *dsc; /**< description */
const char *ref; /**< reference */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
/**
@@ -252,7 +329,7 @@
char rev[LY_REV_SIZE]; /**< revision date (madatory) */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
/**
@@ -264,7 +341,7 @@
const char *ref; /**< reference statement */
int64_t value; /**< enum's value or bit's position */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_ and LYS_SET_VALUE
values are allowed */
};
@@ -278,13 +355,13 @@
const char *name; /**< name of the type (mandatory) */
struct lysp_restr *range; /**< allowed values range - numerical, decimal64 */
struct lysp_restr *length; /**< allowed length of the value - string, binary */
- struct lysp_restr *patterns; /**< list of patterns (0-terminated) - string */
- struct lysp_type_enum *enums; /**< list of enum-stmts (0-terminated) - enum */
- struct lysp_type_enum *bits; /**< list of bit-stmts (0-terminated) - bits */
+ struct lysp_restr *patterns; /**< list of patterns ([sized array](@ref sizedarrays)) - string */
+ struct lysp_type_enum *enums; /**< list of enum-stmts ([sized array](@ref sizedarrays)) - enum */
+ struct lysp_type_enum *bits; /**< list of bit-stmts ([sized array](@ref sizedarrays)) - bits */
const char *path; /**< path - leafref */
const char **bases; /**< list of base identifiers (NULL-terminated) - identityref */
- struct lysp_type *types; /**< list of sub-types (0-terminated) - union */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_type *types; /**< list of sub-types ([sized array](@ref sizedarrays)) - union */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint8_t fraction_digits; /**< number of fraction digits - decimal64 */
uint8_t require_instance; /**< require-instance flag - leafref, instance */
@@ -300,7 +377,7 @@
const char *dflt; /**< default value of the newly defined type */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
struct lysp_type type; /**< base type from which the typedef is derived (mandatory) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_* values allowed */
};
@@ -312,12 +389,12 @@
const char *name; /**< grouping name (mandatory) */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_node *data; /**< list of data nodes (linked list) */
- struct lysp_action *actions; /**< list of actions (0-terminated) */
- struct lysp_notif *notifs; /**< list of notifications (0-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_action *actions; /**< list of actions ([sized array](@ref sizedarrays)) */
+ struct lysp_notif *notifs; /**< list of notifications ([sized array](@ref sizedarrays)) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_* values are allowed */
};
@@ -328,7 +405,7 @@
const char *cond; /**< specified condition (mandatory) */
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
/**
@@ -339,12 +416,12 @@
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
const char *presence; /**< presence description */
const char **dflts; /**< list of default values (NULL-terminated) */
uint32_t min; /**< min-elements constraint */
uint32_t max; /**< max-elements constraint, 0 means unbounded */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) */
};
@@ -358,9 +435,9 @@
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
struct lysp_node *child; /**< list of data nodes (linked list) */
- struct lysp_action *actions; /**< list of actions (0-terminated) */
- struct lysp_notif *notifs; /**< list of notifications (0-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_action *actions; /**< list of actions ([sized array](@ref sizedarrays)) */
+ struct lysp_notif *notifs; /**< list of notifications ([sized array](@ref sizedarrays)) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_* values are allowed */
};
@@ -380,15 +457,15 @@
struct lysp_deviate {
uint8_t mod; /**< [type](@ref deviatetypes) of the deviate modification */
struct lysp_deviate *next; /**< next deviate structure in the list */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
struct lysp_deviate_add {
uint8_t mod; /**< [type](@ref deviatetypes) of the deviate modification */
struct lysp_deviate *next; /**< next deviate structure in the list */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
const char *units; /**< units of the values */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
const char **uniques; /**< list of uniques specifications (NULL-terminated) */
const char **dflts; /**< list of default values (NULL-terminated) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) */
@@ -399,9 +476,9 @@
struct lysp_deviate_del {
uint8_t mod; /**< [type](@ref deviatetypes) of the deviate modification */
struct lysp_deviate *next; /**< next deviate structure in the list */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
const char *units; /**< units of the values */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
const char **uniques; /**< list of uniques specifications (NULL-terminated) */
const char **dflts; /**< list of default values (NULL-terminated) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) */
@@ -410,7 +487,7 @@
struct lysp_deviate_rpl {
uint8_t mod; /**< [type](@ref deviatetypes) of the deviate modification */
struct lysp_deviate *next; /**< next deviate structure in the list */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
struct lysp_type *type; /**< type of the node */
const char *units; /**< units of the values */
const char *dflt; /**< default value */
@@ -424,7 +501,7 @@
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
struct lysp_deviate* deviates; /**< list of deviate specifications (linked list) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
#define LYS_CONFIG_W 0x01 /**< config true; */
@@ -435,18 +512,20 @@
#define LYS_STATUS_OBSLT 0x20 /**< status obsolete; */
#define LYS_STATUS_MASK 0x38 /**< mask for status value */
#define LYS_MAND_TRUE 0x40 /**< mandatory true; applicable only to
- ::lys_node_choice, ::lys_node_leaf and ::lys_node_anydata */
+ ::lysp_node_choice/::lysc_node_choice, ::lysp_node_leaf/::lysc_node_leaf
+ and ::lysp_node_anydata/::lysc_node_anydata */
#define LYS_MAND_FALSE 0x80 /**< mandatory false; applicable only to
- ::lys_node_choice, ::lys_node_leaf and ::lys_node_anydata */
+ ::lysp_node_choice/::lysc_node_choice, ::lysp_node_leaf/::lysc_node_leaf
+ and ::lysp_node_anydata/::lysc_node_anydata */
#define LYS_MAND_MASK 0xc0 /**< mask for mandatory values */
#define LYS_ORDBY_SYSTEM 0x100 /**< ordered-by system lists, applicable only to
- ::lys_node_list and ::lys_node_leaflist */
+ ::lysp_node_list/lysc_node_list and ::lysp_node_leaflist/::lysc_node_list */
#define LYS_ORDBY_USER 0x200 /**< ordered-by user lists, applicable only to
- ::lys_node_list and ::lys_node_leaflist */
+ ::lysp_node_list/lysc_node_list and ::lysp_node_leaflist/::lysc_node_list */
#define LYS_ORDBY_MASK 0x300 /**< mask for ordered-by flags */
-#define LYS_FENABLED 0x100 /**< feature enabled flag, applicable only to ::lys_feature */
+#define LYS_FENABLED 0x100 /**< feature enabled flag, applicable only to ::lysp_feature/::lysc_feature */
#define LYS_AUTOASSIGNED 0x01 /**< value was auto-assigned, applicable only to
- ::lys_type enum and bits flags */
+ ::lysp_type/::lysc_type enum and bits flags */
#define LYS_YINELEM_TRUE 0x01 /**< yin-element true for extension's argument */
#define LYS_YINELEM_FALSE 0x02 /**< yin-element false for extension's argument */
#define LYS_YINELEM_MASK 0x03 /**< mask for yin-element value */
@@ -467,7 +546,7 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
/**
@@ -482,16 +561,16 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* container */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
const char *presence; /**< presence description */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_node *child; /**< list of data nodes (linked list) */
- struct lysp_action *actions; /**< list of actions (0-terminated) */
- struct lysp_notif *notifs; /**< list of notifications (0-terminated) */
+ struct lysp_action *actions; /**< list of actions ([sized array](@ref sizedarrays)) */
+ struct lysp_notif *notifs; /**< list of notifications ([sized array](@ref sizedarrays)) */
};
struct lysp_node_leaf {
@@ -503,10 +582,10 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* leaf */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
struct lysp_type type; /**< type of the leaf node (mandatory) */
const char *units; /**< units of the leaf's type */
const char *dflt; /**< default value */
@@ -521,10 +600,10 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* leaf-list */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
struct lysp_type type; /**< type of the leaf node (mandatory) */
const char *units; /**< units of the leaf's type */
const char **dflts; /**< list of default values (NULL-terminated) */
@@ -541,16 +620,16 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* list */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
const char *key; /**< keys specification */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_node *child; /**< list of data nodes (linked list) */
- struct lysp_action *actions; /**< list of actions (0-terminated) */
- struct lysp_notif *notifs; /**< list of notifications (0-terminated) */
+ struct lysp_action *actions; /**< list of actions ([sized array](@ref sizedarrays)) */
+ struct lysp_notif *notifs; /**< list of notifications ([sized array](@ref sizedarrays)) */
const char **uniques; /**< list of uniques specifications (NULL-terminated) */
uint32_t min; /**< min-elements constraint */
uint32_t max; /**< max-elements constraint, 0 means unbounded */
@@ -565,7 +644,7 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* choice */
struct lysp_node *child; /**< list of data nodes (linked list) */
@@ -581,7 +660,7 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* case */
struct lysp_node *child; /**< list of data nodes (linked list) */
@@ -596,10 +675,10 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* anyxml/anydata */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
};
struct lysp_node_uses {
@@ -611,22 +690,22 @@
const char *ref; /**< reference statement */
struct lysp_when *when; /**< when statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
/* uses */
- struct lysp_refine *refines; /**< list of uses's refines (0-terminated) */
- struct lysp_augment *augments; /**< list of uses's augment (0-terminated) */
+ struct lysp_refine *refines; /**< list of uses's refines ([sized array](@ref sizedarrays)) */
+ struct lysp_augment *augments; /**< list of uses's augment ([sized array](@ref sizedarrays)) */
};
/**
* @brief YANG input-stmt and output-stmt
*/
struct lysp_action_inout {
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_node *data; /**< list of data nodes (linked list) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
};
/**
@@ -637,11 +716,11 @@
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_action_inout *input; /**< RPC's/Action's input */
struct lysp_action_inout *output;/**< RPC's/Action's output */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) */
};
@@ -653,11 +732,11 @@
const char *dsc; /**< description statement */
const char *ref; /**< reference statement */
const char **iffeatures; /**< list of if-feature expressions (NULL-terminated) */
- struct lysp_restr *musts; /**< list of must restrictions (0-terminated) */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_restr *musts; /**< list of must restrictions ([sized array](@ref sizedarrays)) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_node *data; /**< list of data nodes (linked list) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_* values are allowed */
};
@@ -686,25 +765,25 @@
const char *belongsto; /**< belongs to parent module (submodule - mandatory) */
};
const char *prefix; /**< module prefix or submodule belongsto prefix of main module (mandatory) */
- struct lysp_import *imports; /**< list of imported modules (0-terminated) */
- struct lysp_include *includes; /**< list of included submodules (0-terminated) */
+ struct lysp_import *imports; /**< list of imported modules ([sized array](@ref sizedarrays)) */
+ struct lysp_include *includes; /**< list of included submodules ([sized array](@ref sizedarrays)) */
const char *org; /**< party/company responsible for the module */
const char *contact; /**< contact information for the module */
const char *dsc; /**< description of the module */
const char *ref; /**< cross-reference for the module */
- struct lysp_revision *revs; /**< list of the module revisions (0-terminated), the first revision
+ struct lysp_revision *revs; /**< list of the module revisions ([sized array](@ref sizedarrays)), the first revision
in the list is always the last (newest) revision of the module */
- struct lysp_ext *extensions; /**< list of extension statements (0-terminated) */
- struct lysp_feature *features; /**< list of feature definitions (0-terminated) */
- struct lysp_ident *identities; /**< list of identities (0-terminated) */
- struct lysp_tpdf *typedefs; /**< list of typedefs (0-terminated) */
- struct lysp_grp *groupings; /**< list of groupings (0-terminated) */
+ struct lysp_ext *extensions; /**< list of extension statements ([sized array](@ref sizedarrays)) */
+ struct lysp_feature *features; /**< list of feature definitions ([sized array](@ref sizedarrays)) */
+ struct lysp_ident *identities; /**< list of identities ([sized array](@ref sizedarrays)) */
+ struct lysp_tpdf *typedefs; /**< list of typedefs ([sized array](@ref sizedarrays)) */
+ struct lysp_grp *groupings; /**< list of groupings ([sized array](@ref sizedarrays)) */
struct lysp_node *data; /**< list of module's top-level data nodes (linked list) */
- struct lysp_augment *augments; /**< list of augments (0-terminated) */
- struct lysp_action *rpcs; /**< list of RPCs (0-terminated) */
- struct lysp_notif *notifs; /**< list of notifications (0-terminated) */
- struct lysp_deviation *deviations; /**< list of deviations (0-terminated) */
- struct lysp_ext_instance *exts; /**< list of the extension instances (0-terminated) */
+ struct lysp_augment *augments; /**< list of augments ([sized array](@ref sizedarrays)) */
+ struct lysp_action *rpcs; /**< list of RPCs ([sized array](@ref sizedarrays)) */
+ struct lysp_notif *notifs; /**< list of notifications ([sized array](@ref sizedarrays)) */
+ struct lysp_deviation *deviations; /**< list of deviations ([sized array](@ref sizedarrays)) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint8_t submodule:1; /**< flag to distinguish main modules and submodules */
uint8_t implemented:1; /**< flag if the module is implemented, not just imported */
@@ -721,18 +800,64 @@
void lysp_module_free(struct lysp_module *module);
/**
- * @brief Compiled YANG schema tree structure representing YANG module.
- *
- * Semantically validated YANG schema tree for data tree parsing.
- * Contains only the necessary information for the data validation.
+ * @brief YANG when-stmt
*/
-struct lysc_module {
+struct lysc_when {
+ struct lyxp_expr *cond; /**< XPath when condition */
+ struct lysc_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
+};
+
+/**
+ * @brief YANG feature-stmt
+ */
+struct lysc_feature {
+ const char *name; /**< feature name (mandatory) */
+ struct lysc_feature *depfeatures;/**< list of other features depending on this one ([sized array](@ref sizedarrays)) */
+ struct lysc_iffeature *iffeatures; /**< list of if-feature expressions ([sized array](@ref sizedarrays)) */
+ struct lysp_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
+ uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_STATUS_* and
+ #LYS_FENABLED values allowed */
+};
+
+struct lysc_iffeature {
+ struct lysc_feature *features; /**< array of pointers to the features used in expression, size depends on content of expr */
+ uint32_t expr[]; /**< 2bits array describing the if-feature expression in prefix format */
};
/**
* @brief Compiled YANG data node
*/
struct lysc_node {
+ uint16_t nodetype; /**< type of the node (mandatory) */
+ uint16_t flags; /**< [schema node flags](@ref snodeflags) */
+ struct lysp_node *sp; /**< link to the simply parsed (SP) original of the node, NULL if the SP schema was removed. */
+ struct lysc_node *next; /**< pointer to the next sibling node (NULL if there is no one) */
+ const char *name; /**< node name (mandatory) */
+ struct lysc_when *when; /**< when statement */
+ struct lysc_iffeature *iffeatures; /**< list of if-feature expressions ([sized array](@ref sizedarrays)) */
+ struct lysc_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
+};
+
+/**
+ * @brief Compiled YANG schema tree structure representing YANG module.
+ *
+ * Semantically validated YANG schema tree for data tree parsing.
+ * Contains only the necessary information for the data validation.
+ */
+struct lysc_module {
+ struct ly_ctx *ctx; /**< libyang context of the module (mandatory) */
+ const char *name; /**< name of the module (mandatory) */
+ const char *ns; /**< namespace of the module (mandatory) */
+ const char *prefix; /**< module prefix (mandatory) */
+
+
+ struct lysc_feature *features; /**< list of feature definitions ([sized array](@ref sizedarrays)) */
+
+
+ uint8_t implemented:1; /**< flag if the module is implemented, not just imported */
+ uint8_t latest_revision:1; /**< flag if the module was loaded without specific revision and is
+ the latest revision found */
+ uint8_t version:4; /**< yang-version (LYS_VERSION values) */
};
/**
@@ -743,6 +868,67 @@
struct lysc_module *compiled; /**< Compiled and fully validated YANG schema tree for data parsing */
};
+
+/**
+ * @brief Load a schema into the specified context.
+ *
+ * @param[in] ctx libyang context where to process the data model.
+ * @param[in] data The string containing the dumped data model in the specified
+ * format.
+ * @param[in] format Format of the input data (YANG or YIN).
+ * @return Pointer to the data model structure or NULL on error.
+ */
+const struct lys_module *lys_parse_mem(struct ly_ctx *ctx, const char *data, LYS_INFORMAT format);
+
+/**
+ * @brief Read a schema from file descriptor into the specified context.
+ *
+ * \note Current implementation supports only reading data from standard (disk) file, not from sockets, pipes, etc.
+ *
+ * @param[in] ctx libyang context where to process the data model.
+ * @param[in] fd File descriptor of a regular file (e.g. sockets are not supported) containing the schema
+ * in the specified format.
+ * @param[in] format Format of the input data (YANG or YIN).
+ * @return Pointer to the data model structure or NULL on error.
+ */
+const struct lys_module *lys_parse_fd(struct ly_ctx *ctx, int fd, LYS_INFORMAT format);
+
+/**
+ * @brief Load a schema into the specified context from a file.
+ *
+ * @param[in] ctx libyang context where to process the data model.
+ * @param[in] path Path to the file with the model in the specified format.
+ * @param[in] format Format of the input data (YANG or YIN).
+ * @return Pointer to the data model structure or NULL on error.
+ */
+const struct lys_module *lys_parse_path(struct ly_ctx *ctx, const char *path, LYS_INFORMAT format);
+
+/**
+ * @defgroup scflags Schema compile flags
+ * @ingroup schematree
+ *
+ * @{
+ */
+#define LYSC_OPT_FREE_SP 1 /**< Free the input printable schema */
+
+/**
+ * @}
+ */
+
+/**
+ * @brief Compile printable schema into a validated schema linking all the references.
+ *
+ * @param[in] sp Simple parsed printable schema to compile. Can be changed according to the provided options.
+ * @param[in] options Various options to modify compiler behavior, see [compile flags](@ref scflags).
+ * @param[out] sc Resulting compiled schema structure.
+ * @return LY_ERR value.
+ */
+LY_ERR lys_compile(struct lysp_module *sp, int options, struct lysc_module **sc);
+
/** @} */
+#ifdef __cplusplus
+}
+#endif
+
#endif /* LY_TREE_SCHEMA_H_ */
diff --git a/src/tree_schema_helpers.c b/src/tree_schema_helpers.c
new file mode 100644
index 0000000..852b485
--- /dev/null
+++ b/src/tree_schema_helpers.c
@@ -0,0 +1,107 @@
+/**
+ * @file tree_schema_helpers.c
+ * @author Radek Krejci <rkrejci@cesnet.cz>
+ * @brief Parsing and validation helper functions
+ *
+ * Copyright (c) 2015 - 2018 CESNET, z.s.p.o.
+ *
+ * This source code is licensed under BSD 3-Clause License (the "License").
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ */
+#define _XOPEN_SOURCE
+
+#include <ctype.h>
+#include <limits.h>
+#include <time.h>
+
+#include "libyang.h"
+#include "common.h"
+#include "tree_schema_internal.h"
+
+LY_ERR
+lysp_check_prefix(struct ly_parser_ctx *ctx, struct lysp_module *module, const char **value)
+{
+ struct lysp_import *i;
+
+ if (module->prefix && &module->prefix != value && !strcmp(module->prefix, *value)) {
+ LOGVAL(ctx->ctx, LY_VLOG_LINE, &ctx->line, LYVE_REFERENCE,
+ "Prefix \"%s\" already used as module prefix.", *value);
+ return LY_EEXIST;
+ }
+ if (module->imports) {
+ LY_ARRAY_FOR(module->imports, struct lysp_import, i) {
+ if (i->prefix && &i->prefix != value && !strcmp(i->prefix, *value)) {
+ LOGVAL(ctx->ctx, LY_VLOG_LINE, &ctx->line, LYVE_REFERENCE,
+ "Prefix \"%s\" already used to import \"%s\" module.", *value, i->name);
+ return LY_EEXIST;
+ }
+ }
+ }
+ return LY_SUCCESS;
+}
+
+LY_ERR
+lysp_check_date(struct ly_ctx *ctx, const char *date, int date_len, const char *stmt)
+{
+ int i;
+ struct tm tm, tm_;
+ char *r;
+
+ LY_CHECK_ARG_RET(ctx, date, LY_EINVAL);
+ LY_CHECK_ERR_RET(date_len != LY_REV_SIZE - 1, LOGARG(ctx, date_len), LY_EINVAL);
+
+ /* check format */
+ for (i = 0; i < date_len; i++) {
+ if (i == 4 || i == 7) {
+ if (date[i] != '-') {
+ goto error;
+ }
+ } else if (!isdigit(date[i])) {
+ goto error;
+ }
+ }
+
+ /* check content, e.g. 2018-02-31 */
+ memset(&tm, 0, sizeof tm);
+ r = strptime(date, "%Y-%m-%d", &tm);
+ if (!r || r != &date[LY_REV_SIZE - 1]) {
+ goto error;
+ }
+ memcpy(&tm_, &tm, sizeof tm);
+ mktime(&tm_); /* mktime modifies tm_ if it refers invalid date */
+ if (tm.tm_mday != tm_.tm_mday) { /* e.g 2018-02-29 -> 2018-03-01 */
+ /* checking days is enough, since other errors
+ * have been checked by strptime() */
+ goto error;
+ }
+
+ return LY_SUCCESS;
+
+error:
+ LOGVAL(ctx, LY_VLOG_NONE, NULL, LY_VCODE_INVAL, date_len, date, stmt);
+ return LY_EINVAL;
+}
+
+void
+lysp_sort_revisions(struct lysp_revision *revs)
+{
+ uint8_t i, r;
+ struct lysp_revision rev;
+
+ for (i = 1, r = 0; revs && i < LY_ARRAY_SIZE(revs); i++) {
+ if (strcmp(LY_ARRAY_INDEX(revs, i, struct lysp_revision)->rev,
+ LY_ARRAY_INDEX(revs, r, struct lysp_revision)->rev) > 0) {
+ r = i;
+ }
+ }
+
+ if (r) {
+ /* the newest revision is not on position 0, switch them */
+ memcpy(&rev, LY_ARRAY_INDEX(revs, 0), sizeof rev);
+ memcpy(LY_ARRAY_INDEX(revs, 0), LY_ARRAY_INDEX(revs, r), sizeof rev);
+ memcpy(LY_ARRAY_INDEX(revs, r), &rev, sizeof rev);
+ }
+}
diff --git a/src/tree_schema_internal.h b/src/tree_schema_internal.h
new file mode 100644
index 0000000..0c3b489
--- /dev/null
+++ b/src/tree_schema_internal.h
@@ -0,0 +1,87 @@
+/**
+ * @file tree_schema_internal.h
+ * @author Radek Krejci <rkrejci@cesnet.cz>
+ * @brief internal functions for YANG schema trees.
+ *
+ * Copyright (c) 2015 - 2018 CESNET, z.s.p.o.
+ *
+ * This source code is licensed under BSD 3-Clause License (the "License").
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ */
+
+#ifndef LY_TREE_SCHEMA_INTERNAL_H_
+#define LY_TREE_SCHEMA_INTERNAL_H_
+
+/**
+ * @brief List of YANG statement groups - the (sub)module's substatements
+ */
+enum yang_module_stmt {
+ Y_MOD_MODULE_HEADER,
+ Y_MOD_LINKAGE,
+ Y_MOD_META,
+ Y_MOD_REVISION,
+ Y_MOD_BODY
+};
+
+/**
+ * @brief Types of arguments of YANG statements
+ */
+enum yang_arg {
+ Y_IDENTIF_ARG, /**< YANG "identifier-arg-str" rule */
+ Y_PREF_IDENTIF_ARG, /**< YANG "identifier-ref-arg-str" rule */
+ Y_STR_ARG, /**< YANG "string" rule */
+ Y_MAYBE_STR_ARG /**< optional YANG "string" rule */
+};
+
+/**
+ * @brief internal context for schema parsers
+ */
+struct ly_parser_ctx {
+ struct ly_ctx *ctx;
+ uint64_t line; /* line number */
+ uint64_t indent; /* current position on the line for YANG indentation */
+};
+
+/**
+ * @brief Check the currently present prefixes in the module for collision with the new one.
+ *
+ * @param[in] ctx yang parser context.
+ * @param[in] module Schema tree to check.
+ * @param[in] value Newly added prefix value (including its location to distinguish collision with itself).
+ * @return LY_EEXIST when prefix is already used in the module, LY_SUCCESS otherwise
+ */
+LY_ERR lysp_check_prefix(struct ly_parser_ctx *ctx, struct lysp_module *module, const char **value);
+
+/**
+ * @brief Check date string (4DIGIT "-" 2DIGIT "-" 2DIGIT)
+ *
+ * @param[in] ctx Context to store log message.
+ * @param[in] date Date string to check (non-necessarily terminated by \0)
+ * @param[in] date_len Length of the date string, 10 expected.
+ * @param[in] stmt Statement name for error message.
+ * @return LY_ERR value.
+ */
+LY_ERR lysp_check_date(struct ly_ctx *ctx, const char *date, int date_len, const char *stmt);
+
+/**
+ * @brief Just move the newest revision into the first position, does not sort the rest
+ * @param[in] revs Sized-array of the revisions in a printable schema tree.
+ */
+void lysp_sort_revisions(struct lysp_revision *revs);
+
+/**
+ * @brief Free the schema structure. It just frees, it does not remove the schema from its context.
+ * @param[in,out] module Schema module structure to free.
+ * @param[in] private_destructor Function to remove private data from the compiled schema tree.
+ */
+void lys_module_free(struct lys_module *module, void (*private_destructor)(const struct lysc_node *node, void *priv));
+
+/**
+ * @brief
+ */
+LY_ERR yang_parse(struct ly_ctx *ctx, const char *data, struct lysp_module **mod_p);
+
+#endif /* LY_TREE_SCHEMA_INTERNAL_H_ */
diff --git a/tests/src/CMakeLists.txt b/tests/src/CMakeLists.txt
index bce0d9a..04d0d0d 100644
--- a/tests/src/CMakeLists.txt
+++ b/tests/src/CMakeLists.txt
@@ -4,13 +4,17 @@
src_context
src_hash_table
src_xml
- src_parser_yang)
+ src_parser_yang
+ src_tree_schema_compile
+ src_tree_schema_helpers)
set(local_tests_wraps
" "
"-Wl,--wrap=realloc"
"-Wl,--wrap=ly_set_add"
" "
" "
+ " "
+ " "
" ")
set(tests ${tests} ${local_tests} PARENT_SCOPE)
set(tests_wraps ${tests_wraps} ${local_tests_wraps} PARENT_SCOPE)
diff --git a/tests/src/test_common.c b/tests/src/test_common.c
index 60c4f48..0499c42 100644
--- a/tests/src/test_common.c
+++ b/tests/src/test_common.c
@@ -14,8 +14,6 @@
#include "../../src/common.c"
-#define _BSD_SOURCE
-#define _DEFAULT_SOURCE
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
@@ -84,35 +82,6 @@
assert_int_equal(LY_EINVAL, ly_getutf8(&str, &c, &len));
}
-static void
-test_date(void **state)
-{
- (void) state; /* unused */
-
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, NULL, 0, "date"));
- assert_string_equal(logbuf, "Invalid argument date (lysp_check_date()).");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "x", 1, "date"));
- assert_string_equal(logbuf, "Invalid argument date_len (lysp_check_date()).");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "nonsencexx", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"nonsencexx\" of \"date\".");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "123x-11-11", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"123x-11-11\" of \"date\".");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-13-11", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"2018-13-11\" of \"date\".");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-11-41", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"2018-11-41\" of \"date\".");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-02-29", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"2018-02-29\" of \"date\".");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018.02-28", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"2018.02-28\" of \"date\".");
- assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-02.28", 10, "date"));
- assert_string_equal(logbuf, "Invalid value \"2018-02.28\" of \"date\".");
-
- assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2018-11-11", 10, "date"));
- assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2018-02-28", 10, "date"));
- assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2016-02-29", 10, "date"));
-}
-
void *__real_realloc(void *ptr, size_t size);
void *__wrap_realloc(void *ptr, size_t size)
{
@@ -154,7 +123,6 @@
{
const struct CMUnitTest tests[] = {
cmocka_unit_test_setup(test_utf8, logger_setup),
- cmocka_unit_test_setup(test_date, logger_setup),
cmocka_unit_test(test_lyrealloc),
};
diff --git a/tests/src/test_parser_yang.c b/tests/src/test_parser_yang.c
index 3c98be1..e6fec3c 100644
--- a/tests/src/test_parser_yang.c
+++ b/tests/src/test_parser_yang.c
@@ -12,8 +12,9 @@
* https://opensource.org/licenses/BSD-3-Clause
*/
-#define _BSD_SOURCE
-#define _DEFAULT_SOURCE
+#include "../../src/tree_schema.c"
+#include "../../src/parser_yang.c"
+
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
@@ -23,13 +24,12 @@
#include <string.h>
#include "libyang.h"
-#include "../../src/parser_yang.c"
#define BUFSIZE 1024
char logbuf[BUFSIZE] = {0};
/* set to 0 to printing error messages to stderr instead of checking them in code */
-#define ENABLE_LOGGER_CHECKING 0
+#define ENABLE_LOGGER_CHECKING 1
#if ENABLE_LOGGER_CHECKING
static void
@@ -67,6 +67,12 @@
# define logbuf_assert(str)
#endif
+#define TEST_DUP_GENERIC(PREFIX, MEMBER, VALUE1, VALUE2, FUNC, RESULT, LINE, CLEANUP) \
+ str = PREFIX MEMBER" "VALUE1";"MEMBER" "VALUE2";} ..."; \
+ assert_int_equal(LY_EVALID, FUNC(&ctx, &str, RESULT)); \
+ logbuf_assert("Duplicate keyword \""MEMBER"\". Line number "LINE"."); \
+ CLEANUP
+
static void
test_helpers(void **state)
{
@@ -637,11 +643,12 @@
}
static struct lysp_module *
-mod_renew(struct ly_parser_ctx *ctx, struct lysp_module *mod)
+mod_renew(struct ly_parser_ctx *ctx, struct lysp_module *mod, uint8_t submodule)
{
lysp_module_free(mod);
mod = calloc(1, sizeof *mod);
mod->ctx = ctx->ctx;
+ mod->submodule = submodule;
assert_non_null(mod);
return mod;
}
@@ -660,25 +667,25 @@
ctx.line = 1;
ctx.indent = 0;
- mod = mod_renew(&ctx, NULL);
+ mod = mod_renew(&ctx, NULL, 0);
/* missing mandatory substatements */
str = " name {}";
assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
assert_string_equal("name", mod->name);
logbuf_assert("Missing mandatory keyword \"namespace\" as a child of \"module\". Line number 1.");
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
str = " name {namespace urn:x;}";
assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
assert_string_equal("urn:x", mod->ns);
logbuf_assert("Missing mandatory keyword \"prefix\" as a child of \"module\". Line number 1.");
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
str = " name {namespace urn:x;prefix \"x\";}";
assert_int_equal(LY_SUCCESS, parse_sub_module(&ctx, &str, mod));
assert_string_equal("x", mod->prefix);
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
#define SCHEMA_BEGINNING " name {namespace urn:x;prefix \"x\";"
#define TEST_NODE(NODETYPE, INPUT, NAME) \
@@ -687,23 +694,30 @@
assert_non_null(mod->data); \
assert_int_equal(NODETYPE, mod->data->nodetype); \
assert_string_equal(NAME, mod->data->name); \
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
#define TEST_GENERIC(INPUT, TARGET, TEST) \
str = SCHEMA_BEGINNING INPUT; \
assert_int_equal(LY_SUCCESS, parse_sub_module(&ctx, &str, mod)); \
assert_non_null(TARGET); \
TEST; \
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
+#define TEST_DUP(MEMBER, VALUE1, VALUE2, LINE, SUBMODULE) \
+ TEST_DUP_GENERIC(SCHEMA_BEGINNING, MEMBER, VALUE1, VALUE2, \
+ parse_sub_module, mod, LINE, mod = mod_renew(&ctx, mod, SUBMODULE))
/* duplicated namespace, prefix */
- str = SCHEMA_BEGINNING "namespace y;}";
+ TEST_DUP("namespace", "y", "z", "1", 0);
+ TEST_DUP("prefix", "y", "z", "1", 0);
+ TEST_DUP("contact", "a", "b", "1", 0);
+ TEST_DUP("description", "a", "b", "1", 0);
+ TEST_DUP("organization", "a", "b", "1", 0);
+ TEST_DUP("reference", "a", "b", "1", 0);
+
+ /* not allowed in module (submodule-specific) */
+ str = SCHEMA_BEGINNING "belongs-to master {prefix m;}}";
assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
- logbuf_assert("Duplicate keyword \"namespace\". Line number 1.");
- mod = mod_renew(&ctx, mod);
- str = SCHEMA_BEGINNING "prefix y;}";
- assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
- logbuf_assert("Duplicate keyword \"prefix\". Line number 1.");
- mod = mod_renew(&ctx, mod);
+ logbuf_assert("Invalid keyword \"belongs-to\" as a child of \"module\". Line number 1.");
+ mod = mod_renew(&ctx, mod, 0);
/* anydata */
TEST_NODE(LYS_ANYDATA, "anydata test;}", "test");
@@ -711,7 +725,7 @@
TEST_NODE(LYS_ANYXML, "anyxml test;}", "test");
/* augment */
TEST_GENERIC("augment /somepath;}", mod->augments,
- assert_string_equal("/somepath", mod->augments[0].nodeid));
+ assert_string_equal("/somepath", LY_ARRAY_INDEX(mod->augments, 0, struct lysp_augment)->nodeid));
/* choice */
TEST_NODE(LYS_CHOICE, "choice test;}", "test");
/* contact 0..1 */
@@ -724,32 +738,36 @@
assert_string_equal("some description", mod->dsc));
/* deviation */
TEST_GENERIC("deviation /somepath {deviate not-supported;}}", mod->deviations,
- assert_string_equal("/somepath", mod->deviations[0].nodeid));
+ assert_string_equal("/somepath", LY_ARRAY_INDEX(mod->deviations, 0, struct lysp_deviation)->nodeid));
/* extension */
TEST_GENERIC("extension test;}", mod->extensions,
- assert_string_equal("test", mod->extensions[0].name));
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->extensions, 0, struct lysp_ext)->name));
/* feature */
TEST_GENERIC("feature test;}", mod->features,
- assert_string_equal("test", mod->features[0].name));
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->features, 0, struct lysp_feature)->name));
/* grouping */
TEST_GENERIC("grouping grp;}", mod->groupings,
- assert_string_equal("grp", mod->groupings[0].name));
+ assert_string_equal("grp", LY_ARRAY_INDEX(mod->groupings, 0, struct lysp_grp)->name));
/* identity */
TEST_GENERIC("identity test;}", mod->identities,
- assert_string_equal("test", mod->identities[0].name));
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->identities, 0, struct lysp_ident)->name));
/* import */
TEST_GENERIC("import test {prefix z;}}", mod->imports,
- assert_string_equal("test", mod->imports[0].name));
-#if 0
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->imports, 0, struct lysp_import)->name));
+
/* import - prefix collision */
str = SCHEMA_BEGINNING "import test {prefix x;}}";
assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
- logbuf_assert("Duplicate keyword \"namespace\". Line number 1.");
- mod = mod_renew(&ctx, mod);
-#endif
+ logbuf_assert("Prefix \"x\" already used as module prefix. Line number 2.");
+ mod = mod_renew(&ctx, mod, 0);
+ str = SCHEMA_BEGINNING "import test1 {prefix y;}import test2 {prefix y;}}";
+ assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
+ logbuf_assert("Prefix \"y\" already used to import \"test1\" module. Line number 2.");
+ mod = mod_renew(&ctx, mod, 0);
+
/* include */
- TEST_GENERIC("rpc test;}", mod->rpcs,
- assert_string_equal("test", mod->rpcs[0].name));
+ TEST_GENERIC("include test;}", mod->includes,
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->includes, 0, struct lysp_include)->name));
/* leaf */
TEST_NODE(LYS_LEAF, "leaf test {type string;}}", "test");
/* leaf-list */
@@ -758,7 +776,7 @@
TEST_NODE(LYS_LIST, "list test {key a;leaf a {type string;}}}", "test");
/* notification */
TEST_GENERIC("notification test;}", mod->notifs,
- assert_string_equal("test", mod->notifs[0].name));
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->notifs, 0, struct lysp_notif)->name));
/* organization 0..1 */
TEST_GENERIC("organization \"CESNET a.l.e.\";}", mod->org,
assert_string_equal("CESNET a.l.e.", mod->org));
@@ -767,41 +785,308 @@
assert_string_equal("RFC7950", mod->ref));
/* revision */
TEST_GENERIC("revision 2018-10-12;}", mod->revs,
- assert_string_equal("2018-10-12", mod->revs[0].rev));
+ assert_string_equal("2018-10-12", LY_ARRAY_INDEX(mod->revs, 0, struct lysp_revision)->rev));
/* rpc */
TEST_GENERIC("rpc test;}", mod->rpcs,
- assert_string_equal("test", mod->rpcs[0].name));
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->rpcs, 0, struct lysp_action)->name));
/* typedef */
TEST_GENERIC("typedef test{type string;}}", mod->typedefs,
- assert_string_equal("test", mod->typedefs[0].name));
+ assert_string_equal("test", LY_ARRAY_INDEX(mod->typedefs, 0, struct lysp_tpdf)->name));
/* uses */
TEST_NODE(LYS_USES, "uses test;}", "test");
/* yang-version */
str = SCHEMA_BEGINNING "\n\tyang-version 10;}";
assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
logbuf_assert("Invalid value \"10\" of \"yang-version\". Line number 3.");
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
str = SCHEMA_BEGINNING "yang-version 1.0;yang-version 1.1;}";
assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
logbuf_assert("Duplicate keyword \"yang-version\". Line number 3.");
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
str = SCHEMA_BEGINNING "yang-version 1.0;}";
assert_int_equal(LY_SUCCESS, parse_sub_module(&ctx, &str, mod));
assert_int_equal(1, mod->version);
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
str = SCHEMA_BEGINNING "yang-version \"1.1\";}";
assert_int_equal(LY_SUCCESS, parse_sub_module(&ctx, &str, mod));
assert_int_equal(2, mod->version);
- mod = mod_renew(&ctx, mod);
+ mod = mod_renew(&ctx, mod, 0);
+
+ /* extensions */
+ TEST_GENERIC("prefix:test;}", mod->exts,
+ assert_string_equal("prefix:test", LY_ARRAY_INDEX(mod->exts, 0, struct lysp_ext_instance)->name);
+ assert_int_equal(LYEXT_SUBSTMT_SELF, LY_ARRAY_INDEX(mod->exts, 0, struct lysp_ext_instance)->insubstmt));
+ mod = mod_renew(&ctx, mod, 0);
+
+ /* invalid substatement */
+ str = SCHEMA_BEGINNING "must false;}";
+ assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
+ logbuf_assert("Invalid keyword \"must\" as a child of \"module\". Line number 3.");
+ mod = mod_renew(&ctx, mod, 0);
+
+ /* submodule */
+ mod->submodule = 1;
+
+ /* missing mandatory substatements */
+ str = " subname {}";
+ assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
+ assert_string_equal("subname", mod->name);
+ logbuf_assert("Missing mandatory keyword \"belongs-to\" as a child of \"submodule\". Line number 3.");
+ mod = mod_renew(&ctx, mod, 1);
+
+ str = " subname {belongs-to name;}";
+ assert_int_equal(LY_SUCCESS, parse_sub_module(&ctx, &str, mod));
+ assert_string_equal("name", mod->belongsto);
+ mod = mod_renew(&ctx, mod, 1);
+
+#undef SCHEMA_BEGINNING
+#define SCHEMA_BEGINNING " subname {belongs-to name;"
+
+ /* duplicated namespace, prefix */
+ TEST_DUP("belongs-to", "module1", "module2", "3", 1);
+
+ /* not allowed in submodule (module-specific) */
+ str = SCHEMA_BEGINNING "namespace \"urn:z\";}";
+ assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
+ logbuf_assert("Invalid keyword \"namespace\" as a child of \"submodule\". Line number 3.");
+ mod = mod_renew(&ctx, mod, 1);
+ str = SCHEMA_BEGINNING "prefix m;}}";
+ assert_int_equal(LY_EVALID, parse_sub_module(&ctx, &str, mod));
+ logbuf_assert("Invalid keyword \"prefix\" as a child of \"submodule\". Line number 3.");
+ mod = mod_renew(&ctx, mod, 1);
#undef TEST_GENERIC
#undef TEST_NODE
+#undef TEST_DUP
#undef SCHEMA_BEGINNING
lysp_module_free(mod);
ly_ctx_destroy(ctx.ctx, NULL);
}
+static void
+test_identity(void **state)
+{
+ (void) state; /* unused */
+ int dict = 1; /* magic variable for FREE macros */
+
+ struct ly_parser_ctx ctx;
+ struct lysp_ident *ident = NULL;
+ const char *str;
+
+ assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, 0, &ctx.ctx));
+ assert_non_null(ctx.ctx);
+ ctx.line = 1;
+ ctx.indent = 0;
+
+ /* invalid cardinality */
+#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
+ TEST_DUP_GENERIC(" test {", MEMBER, VALUE1, VALUE2, parse_identity, \
+ &ident, "1", FREE_ARRAY(ctx.ctx, ident, lysp_ident_free); ident = NULL)
+
+ TEST_DUP("description", "a", "b");
+ TEST_DUP("reference", "a", "b");
+ TEST_DUP("status", "current", "obsolete");
+
+ /* full content */
+ str = " test {base \"a\";base b; description text;reference \'another text\';status current; if-feature x;if-feature y;prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_identity(&ctx, &str, &ident));
+ assert_non_null(ident);
+ assert_string_equal(" ...", str);
+ FREE_ARRAY(ctx.ctx, ident, lysp_ident_free);
+ ident = NULL;
+
+ /* invalid substatement */
+ str = " test {organization XXX;}";
+ assert_int_equal(LY_EVALID, parse_identity(&ctx, &str, &ident));
+ logbuf_assert("Invalid keyword \"organization\" as a child of \"identity\". Line number 1.");
+ FREE_ARRAY(ctx.ctx, ident, lysp_ident_free);
+ ident = NULL;
+
+#undef TEST_DUP
+
+ ly_ctx_destroy(ctx.ctx, NULL);
+}
+
+static void
+test_feature(void **state)
+{
+ (void) state; /* unused */
+ int dict = 1; /* magic variable for FREE macros */
+
+ struct ly_parser_ctx ctx;
+ struct lysp_feature *features = NULL;
+ const char *str;
+
+ assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, 0, &ctx.ctx));
+ assert_non_null(ctx.ctx);
+ ctx.line = 1;
+ ctx.indent = 0;
+
+ /* invalid cardinality */
+#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
+ TEST_DUP_GENERIC(" test {", MEMBER, VALUE1, VALUE2, parse_feature, \
+ &features, "1", FREE_ARRAY(ctx.ctx, features, lysp_feature_free); features = NULL)
+
+ TEST_DUP("description", "a", "b");
+ TEST_DUP("reference", "a", "b");
+ TEST_DUP("status", "current", "obsolete");
+
+ /* full content */
+ str = " test {description text;reference \'another text\';status current; if-feature x;if-feature y;prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_feature(&ctx, &str, &features));
+ assert_non_null(features);
+ assert_string_equal(" ...", str);
+ FREE_ARRAY(ctx.ctx, features, lysp_feature_free);
+ features = NULL;
+
+ /* invalid substatement */
+ str = " test {organization XXX;}";
+ assert_int_equal(LY_EVALID, parse_feature(&ctx, &str, &features));
+ logbuf_assert("Invalid keyword \"organization\" as a child of \"feature\". Line number 1.");
+ FREE_ARRAY(ctx.ctx, features, lysp_feature_free);
+ features = NULL;
+
+#undef TEST_DUP
+
+ ly_ctx_destroy(ctx.ctx, NULL);
+}
+
+static void
+test_deviation(void **state)
+{
+ (void) state; /* unused */
+ int dict = 1; /* magic variable for FREE macros */
+
+ struct ly_parser_ctx ctx;
+ struct lysp_deviation *d = NULL;
+ const char *str;
+
+ assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, 0, &ctx.ctx));
+ assert_non_null(ctx.ctx);
+ ctx.line = 1;
+ ctx.indent = 0;
+
+ /* invalid cardinality */
+#define TEST_DUP(MEMBER, VALUE1, VALUE2) \
+ TEST_DUP_GENERIC(" test {deviate not-supported;", MEMBER, VALUE1, VALUE2, parse_deviation, \
+ &d, "1", FREE_ARRAY(ctx.ctx, d, lysp_deviation_free); d = NULL)
+
+ TEST_DUP("description", "a", "b");
+ TEST_DUP("reference", "a", "b");
+
+ /* full content */
+ str = " test {deviate not-supported;description text;reference \'another text\';prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_deviation(&ctx, &str, &d));
+ assert_non_null(d);
+ assert_string_equal(" ...", str);
+ FREE_ARRAY(ctx.ctx, d, lysp_deviation_free);
+ d = NULL;
+
+ /* missing mandatory substatement */
+ str = " test {description text;}";
+ assert_int_equal(LY_EVALID, parse_deviation(&ctx, &str, &d));
+ logbuf_assert("Missing mandatory keyword \"deviate\" as a child of \"deviation\". Line number 1.");
+ FREE_ARRAY(ctx.ctx, d, lysp_deviation_free);
+ d = NULL;
+
+ /* invalid substatement */
+ str = " test {deviate not-supported; status obsolete;}";
+ assert_int_equal(LY_EVALID, parse_deviation(&ctx, &str, &d));
+ logbuf_assert("Invalid keyword \"status\" as a child of \"deviation\". Line number 1.");
+ FREE_ARRAY(ctx.ctx, d, lysp_deviation_free);
+ d = NULL;
+
+#undef TEST_DUP
+
+ ly_ctx_destroy(ctx.ctx, NULL);
+}
+
+static void
+test_deviate(void **state)
+{
+ (void) state; /* unused */
+
+ struct ly_parser_ctx ctx;
+ struct lysp_deviate *d = NULL;
+ const char *str;
+
+ assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, 0, &ctx.ctx));
+ assert_non_null(ctx.ctx);
+ ctx.line = 1;
+ ctx.indent = 0;
+
+ /* invalid cardinality */
+#define TEST_DUP(TYPE, MEMBER, VALUE1, VALUE2) \
+ TEST_DUP_GENERIC(TYPE" {", MEMBER, VALUE1, VALUE2, parse_deviate, \
+ &d, "1", lysp_deviate_free(ctx.ctx, d, 1); free(d); d = NULL)
+
+ TEST_DUP("add", "config", "true", "false");
+ TEST_DUP("replace", "default", "int8", "uint8");
+ TEST_DUP("add", "mandatory", "true", "false");
+ TEST_DUP("add", "max-elements", "1", "2");
+ TEST_DUP("add", "min-elements", "1", "2");
+ TEST_DUP("replace", "type", "int8", "uint8");
+ TEST_DUP("add", "units", "kilometers", "miles");
+
+ /* full contents */
+ str = " not-supported {prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_deviate(&ctx, &str, &d));
+ assert_non_null(d);
+ assert_string_equal(" ...", str);
+ lysp_deviate_free(ctx.ctx, d, 1); free(d); d = NULL;
+ str = " add {units meters; must 1; must 2; unique x; unique y; default a; default b; config true; mandatory true; min-elements 1; max-elements 2; prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_deviate(&ctx, &str, &d));
+ assert_non_null(d);
+ assert_string_equal(" ...", str);
+ lysp_deviate_free(ctx.ctx, d, 1); free(d); d = NULL;
+ str = " delete {units meters; must 1; must 2; unique x; unique y; default a; default b; prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_deviate(&ctx, &str, &d));
+ assert_non_null(d);
+ assert_string_equal(" ...", str);
+ lysp_deviate_free(ctx.ctx, d, 1); free(d); d = NULL;
+ str = " replace {type string; units meters; default a; config true; mandatory true; min-elements 1; max-elements 2; prefix:ext;} ...";
+ assert_int_equal(LY_SUCCESS, parse_deviate(&ctx, &str, &d));
+ assert_non_null(d);
+ assert_string_equal(" ...", str);
+ lysp_deviate_free(ctx.ctx, d, 1); free(d); d = NULL;
+
+ /* invalid substatements */
+#define TEST_NOT_SUP(DEV, STMT, VALUE) \
+ str = " "DEV" {"STMT" "VALUE";}..."; \
+ assert_int_equal(LY_EVALID, parse_deviate(&ctx, &str, &d)); \
+ logbuf_assert("Deviate \""DEV"\" does not support keyword \""STMT"\". Line number 1."); \
+ lysp_deviate_free(ctx.ctx, d, 1); free(d); d = NULL
+
+ TEST_NOT_SUP("not-supported", "units", "meters");
+ TEST_NOT_SUP("not-supported", "must", "1");
+ TEST_NOT_SUP("not-supported", "unique", "x");
+ TEST_NOT_SUP("not-supported", "default", "a");
+ TEST_NOT_SUP("not-supported", "config", "true");
+ TEST_NOT_SUP("not-supported", "mandatory", "true");
+ TEST_NOT_SUP("not-supported", "min-elements", "1");
+ TEST_NOT_SUP("not-supported", "max-elements", "2");
+ TEST_NOT_SUP("not-supported", "type", "string");
+ TEST_NOT_SUP("add", "type", "string");
+ TEST_NOT_SUP("delete", "config", "true");
+ TEST_NOT_SUP("delete", "mandatory", "true");
+ TEST_NOT_SUP("delete", "min-elements", "1");
+ TEST_NOT_SUP("delete", "max-elements", "2");
+ TEST_NOT_SUP("delete", "type", "string");
+ TEST_NOT_SUP("replace", "must", "1");
+ TEST_NOT_SUP("replace", "unique", "a");
+
+ str = " nonsence; ...";
+ assert_int_equal(LY_EVALID, parse_deviate(&ctx, &str, &d));
+ logbuf_assert("Invalid value \"nonsence\" of \"deviate\". Line number 1.");
+ assert_null(d);
+
+#undef TEST_NOT_SUP
+#undef TEST_DUP
+
+ ly_ctx_destroy(ctx.ctx, NULL);
+}
+
int main(void)
{
const struct CMUnitTest tests[] = {
@@ -810,6 +1095,10 @@
cmocka_unit_test_setup(test_arg, logger_setup),
cmocka_unit_test_setup(test_stmts, logger_setup),
cmocka_unit_test_setup(test_module, logger_setup),
+ cmocka_unit_test_setup(test_identity, logger_setup),
+ cmocka_unit_test_setup(test_feature, logger_setup),
+ cmocka_unit_test_setup(test_deviation, logger_setup),
+ cmocka_unit_test_setup(test_deviate, logger_setup),
};
return cmocka_run_group_tests(tests, NULL, NULL);
diff --git a/tests/src/test_tree_schema_compile.c b/tests/src/test_tree_schema_compile.c
new file mode 100644
index 0000000..5f30a9d
--- /dev/null
+++ b/tests/src/test_tree_schema_compile.c
@@ -0,0 +1,121 @@
+/*
+ * @file test_parser_yang.c
+ * @author: Radek Krejci <rkrejci@cesnet.cz>
+ * @brief unit tests for functions from parser_yang.c
+ *
+ * Copyright (c) 2018 CESNET, z.s.p.o.
+ *
+ * This source code is licensed under BSD 3-Clause License (the "License").
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ */
+
+#include "../../src/tree_schema.c"
+#include "../../src/parser_yang.c"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include "libyang.h"
+
+#define BUFSIZE 1024
+char logbuf[BUFSIZE] = {0};
+
+/* set to 0 to printing error messages to stderr instead of checking them in code */
+#define ENABLE_LOGGER_CHECKING 1
+
+#if ENABLE_LOGGER_CHECKING
+static void
+logger(LY_LOG_LEVEL level, const char *msg, const char *path)
+{
+ (void) level; /* unused */
+
+ if (path) {
+ snprintf(logbuf, BUFSIZE - 1, "%s %s", msg, path);
+ } else {
+ strncpy(logbuf, msg, BUFSIZE - 1);
+ }
+}
+#endif
+
+static int
+logger_setup(void **state)
+{
+ (void) state; /* unused */
+#if ENABLE_LOGGER_CHECKING
+ ly_set_log_clb(logger, 1);
+#endif
+ return 0;
+}
+
+void
+logbuf_clean(void)
+{
+ logbuf[0] = '\0';
+}
+
+#if ENABLE_LOGGER_CHECKING
+# define logbuf_assert(str) assert_string_equal(logbuf, str)
+#else
+# define logbuf_assert(str)
+#endif
+
+static void
+test_module(void **state)
+{
+ (void) state; /* unused */
+
+ const char *str;
+ struct ly_ctx *ctx;
+ struct lys_module mod = {0};
+
+ str = "module test {namespace urn:test; prefix t;"
+ "feature f1;}";
+ assert_int_equal(LY_SUCCESS, ly_ctx_new(NULL, 0, &ctx));
+
+ assert_int_equal(LY_EINVAL, lys_compile(NULL, 0, NULL));
+ logbuf_assert("Invalid argument sc (lys_compile()).");
+ assert_int_equal(LY_EINVAL, lys_compile(NULL, 0, &mod.compiled));
+ logbuf_assert("Invalid argument sp (lys_compile()).");
+ assert_int_equal(LY_SUCCESS, yang_parse(ctx, str, &mod.parsed));
+ assert_int_equal(LY_SUCCESS, lys_compile(mod.parsed, 0, &mod.compiled));
+ assert_non_null(mod.compiled);
+ assert_ptr_equal(mod.parsed->name, mod.compiled->name);
+ assert_ptr_equal(mod.parsed->ns, mod.compiled->ns);
+
+ lysc_module_free(mod.compiled, NULL);
+
+ assert_int_equal(LY_SUCCESS, lys_compile(mod.parsed, LYSC_OPT_FREE_SP, &mod.compiled));
+ assert_non_null(mod.compiled);
+ assert_string_equal("test", mod.compiled->name);
+ assert_string_equal("urn:test", mod.compiled->ns);
+
+ lysc_module_free(mod.compiled, NULL);
+ mod.compiled = NULL;
+
+ str = "submodule test {belongs-to xxx {prefix x;}}";
+ assert_int_equal(LY_SUCCESS, yang_parse(ctx, str, &mod.parsed));
+ assert_int_equal(LY_EINVAL, lys_compile(mod.parsed, 0, &mod.compiled));
+ logbuf_assert("Submodules (test) are not supposed to be compiled, compile only the main modules.");
+ assert_null(mod.compiled);
+
+ lysp_module_free(mod.parsed);
+ ly_ctx_destroy(ctx, NULL);
+}
+
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test_setup(test_module, logger_setup),
+ };
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/tests/src/test_tree_schema_helpers.c b/tests/src/test_tree_schema_helpers.c
new file mode 100644
index 0000000..53cbded
--- /dev/null
+++ b/tests/src/test_tree_schema_helpers.c
@@ -0,0 +1,82 @@
+/*
+ * @file set.c
+ * @author: Radek Krejci <rkrejci@cesnet.cz>
+ * @brief unit tests for functions from common.c
+ *
+ * Copyright (c) 2018 CESNET, z.s.p.o.
+ *
+ * This source code is licensed under BSD 3-Clause License (the "License").
+ * You may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ */
+
+#include "../../src/tree_schema_helpers.c"
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "libyang.h"
+
+#define BUFSIZE 1024
+char logbuf[BUFSIZE] = {0};
+
+static void
+logger(LY_LOG_LEVEL level, const char *msg, const char *path)
+{
+ (void) level; /* unused */
+ (void) path; /* unused */
+
+ strncpy(logbuf, msg, BUFSIZE - 1);
+}
+
+static int
+logger_setup(void **state)
+{
+ (void) state; /* unused */
+
+ ly_set_log_clb(logger, 0);
+
+ return 0;
+}
+
+static void
+test_date(void **state)
+{
+ (void) state; /* unused */
+
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, NULL, 0, "date"));
+ assert_string_equal(logbuf, "Invalid argument date (lysp_check_date()).");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "x", 1, "date"));
+ assert_string_equal(logbuf, "Invalid argument date_len (lysp_check_date()).");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "nonsencexx", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"nonsencexx\" of \"date\".");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "123x-11-11", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"123x-11-11\" of \"date\".");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-13-11", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"2018-13-11\" of \"date\".");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-11-41", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"2018-11-41\" of \"date\".");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-02-29", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"2018-02-29\" of \"date\".");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018.02-28", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"2018.02-28\" of \"date\".");
+ assert_int_equal(LY_EINVAL, lysp_check_date(NULL, "2018-02.28", 10, "date"));
+ assert_string_equal(logbuf, "Invalid value \"2018-02.28\" of \"date\".");
+
+ assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2018-11-11", 10, "date"));
+ assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2018-02-28", 10, "date"));
+ assert_int_equal(LY_SUCCESS, lysp_check_date(NULL, "2016-02-29", 10, "date"));
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test_setup(test_date, logger_setup),
+ };
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}