Browse code

Merge branch 'master' of https://github.com/vmware/photon

archive authored on 2019/05/31 23:30:23
Showing 28 changed files
... ...
@@ -1,34 +1,38 @@
1
-Summary:  Certificate Authority certificates 
2
-Name:   ca-certificates
3
-Version:  20180919
4
-Release:  1%{?dist}
5
-License:  Custom
1
+Summary:        Certificate Authority certificates
2
+Name:           ca-certificates
3
+Version:        20190521
4
+Release:        1%{?dist}
5
+License:        Custom
6 6
 # http://anduin.linuxfromscratch.org/BLFS/other/certdata.txt
7
-URL:    http://anduin.linuxfromscratch.org/BLFS/other/
8
-Group:    System Environment/Security
9
-Vendor:   VMware, Inc.
10
-Distribution: Photon
11
-Source0:  certdata.txt
12
-Requires:   openssl
7
+URL:            http://anduin.linuxfromscratch.org/BLFS/other/
8
+Group:          System Environment/Security
9
+Vendor:         VMware, Inc.
10
+Distribution:   Photon
11
+Source0:        certdata.txt
12
+Requires:       openssl
13 13
 BuildRequires:  openssl
14
-Requires:   ca-certificates-pki = %{version}-%{release}
14
+Requires:       ca-certificates-pki = %{version}-%{release}
15 15
 Requires(post): /bin/ln
16 16
 Provides:       ca-certificates-mozilla
17
+
17 18
 %description
18 19
 The Public Key Inrastructure is used for many security issues in a
19 20
 Linux system. In order for a certificate to be trusted, it must be
20 21
 signed by a trusted agent called a Certificate Authority (CA). The
21 22
 certificates loaded by this section are from the list on the Mozilla
22
-version control system and formats it into a form used by 
23
+version control system and formats it into a form used by
23 24
 OpenSSL-1.0.1e. The certificates can also be used by other applications
24 25
 either directly of indirectly through openssl.
26
+
25 27
 %package pki
26 28
 Summary:  Certificate Authority certificates (pki tls certs)
27 29
 Group:    System Environment/Security
30
+
28 31
 %description pki
29 32
 Certificate Authority certificates (pki tls certs)
30 33
 
31 34
 %prep -p exit
35
+
32 36
 %build
33 37
 [ %{builddir} != "/"] && rm -rf %{builddir}/*
34 38
 install -vdm 755 %{_builddir}/bin/
... ...
@@ -215,6 +219,7 @@ printf "Build portion completed\n"
215 215
 
216 216
 sed -i 's|CONVERTSCRIPT="bin/make-cert.pl"|CONVERTSCRIPT="/bin/make-cert.pl"|' bin/make-ca.sh
217 217
 sed -i 's|DIR=certs|DIR=/etc/ssl/certs|' bin/remove-expired-certs.sh
218
+
218 219
 %install
219 220
 SSLDIR=/etc/ssl
220 221
 install -d %{buildroot}/${SSLDIR}/certs
... ...
@@ -228,10 +233,12 @@ install -Dm644 bin/make-ca.sh %{buildroot}/bin/make-ca.sh
228 228
 install -Dm644 bin/make-cert.pl %{buildroot}/bin/make-cert.pl
229 229
 install -Dm644 bin/remove-expired-certs.sh %{buildroot}/bin/remove-expired-certs.sh
230 230
 %{_fixperms} %{buildroot}/*
231
-%post 
231
+
232
+%post
232 233
 cd /etc/ssl/certs;
233 234
 for file in *.pem; do ln -sf $file `openssl x509 -hash -noout -in $file`.0; done
234 235
 exit 0
236
+
235 237
 %clean
236 238
 %files
237 239
 %defattr(-,root,root)
... ...
@@ -239,10 +246,14 @@ exit 0
239 239
 /bin/make-ca.sh
240 240
 /bin/remove-expired-certs.sh
241 241
 /bin/make-cert.pl
242
+
242 243
 %files pki
243 244
 %defattr(-,root,root)
244 245
 /etc/pki/tls/certs/ca-bundle.crt
246
+
245 247
 %changelog
248
+* Wed May 22 2019 Gerrit Photon <photon-checkins@vmware.com> 20190521-1
249
+- Automatic Version Bump
246 250
 * Tue Sep 25 2018 Ankit Jain <ankitja@vmware.com> 20180919-1
247 251
 - Updating mozilla certdata.txt to latest revision
248 252
 * Wed May  3 2017 Bo Gan <ganb@vmware.com> 20170406-3
... ...
@@ -255,7 +266,7 @@ exit 0
255 255
 - GA - Bump release of all rpms
256 256
 * Wed Feb 10 2016 Anish Swaminathan <anishs@vmware.com> 20160109-4
257 257
 - Add Provides field
258
-* Mon Feb 03 2016 Anish Swaminathan <anishs@vmware.com> 20160109-3
258
+* Wed Feb 03 2016 Anish Swaminathan <anishs@vmware.com> 20160109-3
259 259
 - Force create links for certificates
260 260
 * Mon Feb 01 2016 Anish Swaminathan <anishs@vmware.com> 20160109-2
261 261
 - Remove c_rehash dependency
... ...
@@ -1,4 +1,4 @@
1
-#CVS_ID @# $ RCSfile: certdata.txt $ $Revision: 20180919 $ $Date: $
1
+#CVS_ID @# $ RCSfile: certdata.txt $ $Revision: 20190521 $ $Date: $
2 2
 # 
3 3
 # This Source Code Form is subject to the terms of the Mozilla Public
4 4
 # License, v. 2.0. If a copy of the MPL was not distributed with this
... ...
@@ -2146,146 +2146,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
2146 2146
 CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
2147 2147
 
2148 2148
 #
2149
-# Certificate "Visa eCommerce Root"
2150
-#
2151
-# Issuer: CN=Visa eCommerce Root,OU=Visa International Service Association,O=VISA,C=US
2152
-# Serial Number:13:86:35:4d:1d:3f:06:f2:c1:f9:65:05:d5:90:1c:62
2153
-# Subject: CN=Visa eCommerce Root,OU=Visa International Service Association,O=VISA,C=US
2154
-# Not Valid Before: Wed Jun 26 02:18:36 2002
2155
-# Not Valid After : Fri Jun 24 00:16:12 2022
2156
-# Fingerprint (MD5): FC:11:B8:D8:08:93:30:00:6D:23:F9:7E:EB:52:1E:02
2157
-# Fingerprint (SHA1): 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62
2158
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
2159
-CKA_TOKEN CK_BBOOL CK_TRUE
2160
-CKA_PRIVATE CK_BBOOL CK_FALSE
2161
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
2162
-CKA_LABEL UTF8 "Visa eCommerce Root"
2163
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
2164
-CKA_SUBJECT MULTILINE_OCTAL
2165
-\060\153\061\013\060\011\006\003\125\004\006\023\002\125\123\061
2166
-\015\060\013\006\003\125\004\012\023\004\126\111\123\101\061\057
2167
-\060\055\006\003\125\004\013\023\046\126\151\163\141\040\111\156
2168
-\164\145\162\156\141\164\151\157\156\141\154\040\123\145\162\166
2169
-\151\143\145\040\101\163\163\157\143\151\141\164\151\157\156\061
2170
-\034\060\032\006\003\125\004\003\023\023\126\151\163\141\040\145
2171
-\103\157\155\155\145\162\143\145\040\122\157\157\164
2172
-END
2173
-CKA_ID UTF8 "0"
2174
-CKA_ISSUER MULTILINE_OCTAL
2175
-\060\153\061\013\060\011\006\003\125\004\006\023\002\125\123\061
2176
-\015\060\013\006\003\125\004\012\023\004\126\111\123\101\061\057
2177
-\060\055\006\003\125\004\013\023\046\126\151\163\141\040\111\156
2178
-\164\145\162\156\141\164\151\157\156\141\154\040\123\145\162\166
2179
-\151\143\145\040\101\163\163\157\143\151\141\164\151\157\156\061
2180
-\034\060\032\006\003\125\004\003\023\023\126\151\163\141\040\145
2181
-\103\157\155\155\145\162\143\145\040\122\157\157\164
2182
-END
2183
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
2184
-\002\020\023\206\065\115\035\077\006\362\301\371\145\005\325\220
2185
-\034\142
2186
-END
2187
-CKA_VALUE MULTILINE_OCTAL
2188
-\060\202\003\242\060\202\002\212\240\003\002\001\002\002\020\023
2189
-\206\065\115\035\077\006\362\301\371\145\005\325\220\034\142\060
2190
-\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\153
2191
-\061\013\060\011\006\003\125\004\006\023\002\125\123\061\015\060
2192
-\013\006\003\125\004\012\023\004\126\111\123\101\061\057\060\055
2193
-\006\003\125\004\013\023\046\126\151\163\141\040\111\156\164\145
2194
-\162\156\141\164\151\157\156\141\154\040\123\145\162\166\151\143
2195
-\145\040\101\163\163\157\143\151\141\164\151\157\156\061\034\060
2196
-\032\006\003\125\004\003\023\023\126\151\163\141\040\145\103\157
2197
-\155\155\145\162\143\145\040\122\157\157\164\060\036\027\015\060
2198
-\062\060\066\062\066\060\062\061\070\063\066\132\027\015\062\062
2199
-\060\066\062\064\060\060\061\066\061\062\132\060\153\061\013\060
2200
-\011\006\003\125\004\006\023\002\125\123\061\015\060\013\006\003
2201
-\125\004\012\023\004\126\111\123\101\061\057\060\055\006\003\125
2202
-\004\013\023\046\126\151\163\141\040\111\156\164\145\162\156\141
2203
-\164\151\157\156\141\154\040\123\145\162\166\151\143\145\040\101
2204
-\163\163\157\143\151\141\164\151\157\156\061\034\060\032\006\003
2205
-\125\004\003\023\023\126\151\163\141\040\145\103\157\155\155\145
2206
-\162\143\145\040\122\157\157\164\060\202\001\042\060\015\006\011
2207
-\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017\000
2208
-\060\202\001\012\002\202\001\001\000\257\127\336\126\036\156\241
2209
-\332\140\261\224\047\313\027\333\007\077\200\205\117\310\234\266
2210
-\320\364\157\117\317\231\330\341\333\302\110\134\072\254\071\063
2211
-\307\037\152\213\046\075\053\065\365\110\261\221\301\002\116\004
2212
-\226\221\173\260\063\360\261\024\116\021\157\265\100\257\033\105
2213
-\245\112\357\176\266\254\362\240\037\130\077\022\106\140\074\215
2214
-\241\340\175\317\127\076\063\036\373\107\361\252\025\227\007\125
2215
-\146\245\265\055\056\330\200\131\262\247\015\267\106\354\041\143
2216
-\377\065\253\245\002\317\052\364\114\376\173\365\224\135\204\115
2217
-\250\362\140\217\333\016\045\074\237\163\161\317\224\337\112\352
2218
-\333\337\162\070\214\363\226\275\361\027\274\322\272\073\105\132
2219
-\306\247\366\306\027\213\001\235\374\031\250\052\203\026\270\072
2220
-\110\376\116\076\240\253\006\031\351\123\363\200\023\007\355\055
2221
-\277\077\012\074\125\040\071\054\054\000\151\164\225\112\274\040
2222
-\262\251\171\345\030\211\221\250\334\034\115\357\273\176\067\013
2223
-\135\376\071\245\210\122\214\000\154\354\030\174\101\275\366\213
2224
-\165\167\272\140\235\204\347\376\055\002\003\001\000\001\243\102
2225
-\060\100\060\017\006\003\125\035\023\001\001\377\004\005\060\003
2226
-\001\001\377\060\016\006\003\125\035\017\001\001\377\004\004\003
2227
-\002\001\006\060\035\006\003\125\035\016\004\026\004\024\025\070
2228
-\203\017\077\054\077\160\063\036\315\106\376\007\214\040\340\327
2229
-\303\267\060\015\006\011\052\206\110\206\367\015\001\001\005\005
2230
-\000\003\202\001\001\000\137\361\101\175\174\134\010\271\053\340
2231
-\325\222\107\372\147\134\245\023\303\003\041\233\053\114\211\106
2232
-\317\131\115\311\376\245\100\266\143\315\335\161\050\225\147\021
2233
-\314\044\254\323\104\154\161\256\001\040\153\003\242\217\030\267
2234
-\051\072\175\345\026\140\123\170\074\300\257\025\203\367\217\122
2235
-\063\044\275\144\223\227\356\213\367\333\030\250\155\161\263\367
2236
-\054\027\320\164\045\151\367\376\153\074\224\276\115\113\101\214
2237
-\116\342\163\320\343\220\042\163\103\315\363\357\352\163\316\105
2238
-\212\260\246\111\377\114\175\235\161\210\304\166\035\220\133\035
2239
-\356\375\314\367\356\375\140\245\261\172\026\161\321\026\320\174
2240
-\022\074\154\151\227\333\256\137\071\232\160\057\005\074\031\106
2241
-\004\231\040\066\320\140\156\141\006\273\026\102\214\160\367\060
2242
-\373\340\333\146\243\000\001\275\346\054\332\221\137\240\106\213
2243
-\115\152\234\075\075\335\005\106\376\166\277\240\012\074\344\000
2244
-\346\047\267\377\204\055\336\272\042\047\226\020\161\353\042\355
2245
-\337\337\063\234\317\343\255\256\216\324\216\346\117\121\257\026
2246
-\222\340\134\366\007\017
2247
-END
2248
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
2249
-
2250
-# Trust for Certificate "Visa eCommerce Root"
2251
-# Issuer: CN=Visa eCommerce Root,OU=Visa International Service Association,O=VISA,C=US
2252
-# Serial Number:13:86:35:4d:1d:3f:06:f2:c1:f9:65:05:d5:90:1c:62
2253
-# Subject: CN=Visa eCommerce Root,OU=Visa International Service Association,O=VISA,C=US
2254
-# Not Valid Before: Wed Jun 26 02:18:36 2002
2255
-# Not Valid After : Fri Jun 24 00:16:12 2022
2256
-# Fingerprint (MD5): FC:11:B8:D8:08:93:30:00:6D:23:F9:7E:EB:52:1E:02
2257
-# Fingerprint (SHA1): 70:17:9B:86:8C:00:A4:FA:60:91:52:22:3F:9F:3E:32:BD:E0:05:62
2258
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
2259
-CKA_TOKEN CK_BBOOL CK_TRUE
2260
-CKA_PRIVATE CK_BBOOL CK_FALSE
2261
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
2262
-CKA_LABEL UTF8 "Visa eCommerce Root"
2263
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
2264
-\160\027\233\206\214\000\244\372\140\221\122\042\077\237\076\062
2265
-\275\340\005\142
2266
-END
2267
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
2268
-\374\021\270\330\010\223\060\000\155\043\371\176\353\122\036\002
2269
-END
2270
-CKA_ISSUER MULTILINE_OCTAL
2271
-\060\153\061\013\060\011\006\003\125\004\006\023\002\125\123\061
2272
-\015\060\013\006\003\125\004\012\023\004\126\111\123\101\061\057
2273
-\060\055\006\003\125\004\013\023\046\126\151\163\141\040\111\156
2274
-\164\145\162\156\141\164\151\157\156\141\154\040\123\145\162\166
2275
-\151\143\145\040\101\163\163\157\143\151\141\164\151\157\156\061
2276
-\034\060\032\006\003\125\004\003\023\023\126\151\163\141\040\145
2277
-\103\157\155\155\145\162\143\145\040\122\157\157\164
2278
-END
2279
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
2280
-\002\020\023\206\065\115\035\077\006\362\301\371\145\005\325\220
2281
-\034\142
2282
-END
2283
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
2284
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
2285
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
2286
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
2287
-
2288
-#
2289 2149
 # Certificate "Certum Root CA"
2290 2150
 #
2291 2151
 # Issuer: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL
... ...
@@ -7055,193 +6915,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
7055 7055
 CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
7056 7056
 
7057 7057
 #
7058
-# Certificate "AC Raiz Certicamara S.A."
7059
-#
7060
-# Issuer: CN=AC Ra..z Certic..mara S.A.,O=Sociedad Cameral de Certificaci..n Digital - Certic..mara S.A.,C=CO
7061
-# Serial Number:07:7e:52:93:7b:e0:15:e3:57:f0:69:8c:cb:ec:0c
7062
-# Subject: CN=AC Ra..z Certic..mara S.A.,O=Sociedad Cameral de Certificaci..n Digital - Certic..mara S.A.,C=CO
7063
-# Not Valid Before: Mon Nov 27 20:46:29 2006
7064
-# Not Valid After : Tue Apr 02 21:42:02 2030
7065
-# Fingerprint (MD5): 93:2A:3E:F6:FD:23:69:0D:71:20:D4:2B:47:99:2B:A6
7066
-# Fingerprint (SHA1): CB:A1:C5:F8:B0:E3:5E:B8:B9:45:12:D3:F9:34:A2:E9:06:10:D3:36
7067
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
7068
-CKA_TOKEN CK_BBOOL CK_TRUE
7069
-CKA_PRIVATE CK_BBOOL CK_FALSE
7070
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
7071
-CKA_LABEL UTF8 "AC Ra\xC3\xADz Certic\xC3\xA1mara S.A."
7072
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
7073
-CKA_SUBJECT MULTILINE_OCTAL
7074
-\060\173\061\013\060\011\006\003\125\004\006\023\002\103\117\061
7075
-\107\060\105\006\003\125\004\012\014\076\123\157\143\151\145\144
7076
-\141\144\040\103\141\155\145\162\141\154\040\144\145\040\103\145
7077
-\162\164\151\146\151\143\141\143\151\303\263\156\040\104\151\147
7078
-\151\164\141\154\040\055\040\103\145\162\164\151\143\303\241\155
7079
-\141\162\141\040\123\056\101\056\061\043\060\041\006\003\125\004
7080
-\003\014\032\101\103\040\122\141\303\255\172\040\103\145\162\164
7081
-\151\143\303\241\155\141\162\141\040\123\056\101\056
7082
-END
7083
-CKA_ID UTF8 "0"
7084
-CKA_ISSUER MULTILINE_OCTAL
7085
-\060\173\061\013\060\011\006\003\125\004\006\023\002\103\117\061
7086
-\107\060\105\006\003\125\004\012\014\076\123\157\143\151\145\144
7087
-\141\144\040\103\141\155\145\162\141\154\040\144\145\040\103\145
7088
-\162\164\151\146\151\143\141\143\151\303\263\156\040\104\151\147
7089
-\151\164\141\154\040\055\040\103\145\162\164\151\143\303\241\155
7090
-\141\162\141\040\123\056\101\056\061\043\060\041\006\003\125\004
7091
-\003\014\032\101\103\040\122\141\303\255\172\040\103\145\162\164
7092
-\151\143\303\241\155\141\162\141\040\123\056\101\056
7093
-END
7094
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
7095
-\002\017\007\176\122\223\173\340\025\343\127\360\151\214\313\354
7096
-\014
7097
-END
7098
-CKA_VALUE MULTILINE_OCTAL
7099
-\060\202\006\146\060\202\004\116\240\003\002\001\002\002\017\007
7100
-\176\122\223\173\340\025\343\127\360\151\214\313\354\014\060\015
7101
-\006\011\052\206\110\206\367\015\001\001\005\005\000\060\173\061
7102
-\013\060\011\006\003\125\004\006\023\002\103\117\061\107\060\105
7103
-\006\003\125\004\012\014\076\123\157\143\151\145\144\141\144\040
7104
-\103\141\155\145\162\141\154\040\144\145\040\103\145\162\164\151
7105
-\146\151\143\141\143\151\303\263\156\040\104\151\147\151\164\141
7106
-\154\040\055\040\103\145\162\164\151\143\303\241\155\141\162\141
7107
-\040\123\056\101\056\061\043\060\041\006\003\125\004\003\014\032
7108
-\101\103\040\122\141\303\255\172\040\103\145\162\164\151\143\303
7109
-\241\155\141\162\141\040\123\056\101\056\060\036\027\015\060\066
7110
-\061\061\062\067\062\060\064\066\062\071\132\027\015\063\060\060
7111
-\064\060\062\062\061\064\062\060\062\132\060\173\061\013\060\011
7112
-\006\003\125\004\006\023\002\103\117\061\107\060\105\006\003\125
7113
-\004\012\014\076\123\157\143\151\145\144\141\144\040\103\141\155
7114
-\145\162\141\154\040\144\145\040\103\145\162\164\151\146\151\143
7115
-\141\143\151\303\263\156\040\104\151\147\151\164\141\154\040\055
7116
-\040\103\145\162\164\151\143\303\241\155\141\162\141\040\123\056
7117
-\101\056\061\043\060\041\006\003\125\004\003\014\032\101\103\040
7118
-\122\141\303\255\172\040\103\145\162\164\151\143\303\241\155\141
7119
-\162\141\040\123\056\101\056\060\202\002\042\060\015\006\011\052
7120
-\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060
7121
-\202\002\012\002\202\002\001\000\253\153\211\243\123\314\110\043
7122
-\010\373\303\317\121\226\010\056\270\010\172\155\074\220\027\206
7123
-\251\351\355\056\023\064\107\262\320\160\334\311\074\320\215\312
7124
-\356\113\027\253\320\205\260\247\043\004\313\250\242\374\345\165
7125
-\333\100\312\142\211\217\120\236\001\075\046\133\030\204\034\313
7126
-\174\067\267\175\354\323\177\163\031\260\152\262\330\210\212\055
7127
-\105\164\250\367\263\270\300\324\332\315\042\211\164\115\132\025
7128
-\071\163\030\164\117\265\353\231\247\301\036\210\264\302\223\220
7129
-\143\227\363\247\247\022\262\011\042\007\063\331\221\315\016\234
7130
-\037\016\040\307\356\273\063\215\217\302\322\130\247\137\375\145
7131
-\067\342\210\302\330\217\206\165\136\371\055\247\207\063\362\170
7132
-\067\057\213\274\035\206\067\071\261\224\362\330\274\112\234\203
7133
-\030\132\006\374\363\324\324\272\214\025\011\045\360\371\266\215
7134
-\004\176\027\022\063\153\127\110\114\117\333\046\036\353\314\220
7135
-\347\213\371\150\174\160\017\243\052\320\072\070\337\067\227\342
7136
-\133\336\200\141\323\200\330\221\203\102\132\114\004\211\150\021
7137
-\074\254\137\150\200\101\314\140\102\316\015\132\052\014\017\233
7138
-\060\300\246\360\206\333\253\111\327\227\155\110\213\371\003\300
7139
-\122\147\233\022\367\302\362\056\230\145\102\331\326\232\343\320
7140
-\031\061\014\255\207\325\127\002\172\060\350\206\046\373\217\043
7141
-\212\124\207\344\277\074\356\353\303\165\110\137\036\071\157\201
7142
-\142\154\305\055\304\027\124\031\267\067\215\234\067\221\310\366
7143
-\013\325\352\143\157\203\254\070\302\363\077\336\232\373\341\043
7144
-\141\360\310\046\313\066\310\241\363\060\217\244\243\242\241\335
7145
-\123\263\336\360\232\062\037\203\221\171\060\301\251\037\123\233
7146
-\123\242\025\123\077\335\235\263\020\073\110\175\211\017\374\355
7147
-\003\365\373\045\144\165\016\027\031\015\217\000\026\147\171\172
7148
-\100\374\055\131\007\331\220\372\232\255\075\334\200\212\346\134
7149
-\065\242\147\114\021\153\261\370\200\144\000\055\157\042\141\305
7150
-\254\113\046\345\132\020\202\233\244\203\173\064\367\236\211\221
7151
-\040\227\216\267\102\307\146\303\320\351\244\326\365\040\215\304
7152
-\303\225\254\104\012\235\133\163\074\046\075\057\112\276\247\311
7153
-\247\020\036\373\237\120\151\363\002\003\001\000\001\243\201\346
7154
-\060\201\343\060\017\006\003\125\035\023\001\001\377\004\005\060
7155
-\003\001\001\377\060\016\006\003\125\035\017\001\001\377\004\004
7156
-\003\002\001\006\060\035\006\003\125\035\016\004\026\004\024\321
7157
-\011\320\351\327\316\171\164\124\371\072\060\263\364\155\054\003
7158
-\003\033\150\060\201\240\006\003\125\035\040\004\201\230\060\201
7159
-\225\060\201\222\006\004\125\035\040\000\060\201\211\060\053\006
7160
-\010\053\006\001\005\005\007\002\001\026\037\150\164\164\160\072
7161
-\057\057\167\167\167\056\143\145\162\164\151\143\141\155\141\162
7162
-\141\056\143\157\155\057\144\160\143\057\060\132\006\010\053\006
7163
-\001\005\005\007\002\002\060\116\032\114\114\151\155\151\164\141
7164
-\143\151\157\156\145\163\040\144\145\040\147\141\162\141\156\164
7165
-\355\141\163\040\144\145\040\145\163\164\145\040\143\145\162\164
7166
-\151\146\151\143\141\144\157\040\163\145\040\160\165\145\144\145
7167
-\156\040\145\156\143\157\156\164\162\141\162\040\145\156\040\154
7168
-\141\040\104\120\103\056\060\015\006\011\052\206\110\206\367\015
7169
-\001\001\005\005\000\003\202\002\001\000\134\224\265\270\105\221
7170
-\115\216\141\037\003\050\017\123\174\346\244\131\251\263\212\172
7171
-\305\260\377\010\174\054\243\161\034\041\023\147\241\225\022\100
7172
-\065\203\203\217\164\333\063\134\360\111\166\012\201\122\335\111
7173
-\324\232\062\063\357\233\247\313\165\345\172\313\227\022\220\134
7174
-\272\173\305\233\337\273\071\043\310\377\230\316\012\115\042\001
7175
-\110\007\176\212\300\325\040\102\224\104\357\277\167\242\211\147
7176
-\110\033\100\003\005\241\211\354\317\142\343\075\045\166\146\277
7177
-\046\267\273\042\276\157\377\071\127\164\272\172\311\001\225\301
7178
-\225\121\350\253\054\370\261\206\040\351\077\313\065\133\322\027
7179
-\351\052\376\203\023\027\100\356\210\142\145\133\325\073\140\351
7180
-\173\074\270\311\325\177\066\002\045\252\150\302\061\025\267\060
7181
-\145\353\177\035\110\171\261\317\071\342\102\200\026\323\365\223
7182
-\043\374\114\227\311\132\067\154\174\042\330\112\315\322\216\066
7183
-\203\071\221\220\020\310\361\311\065\176\077\270\323\201\306\040
7184
-\144\032\266\120\302\041\244\170\334\320\057\073\144\223\164\360
7185
-\226\220\361\357\373\011\132\064\100\226\360\066\022\301\243\164
7186
-\214\223\176\101\336\167\213\354\206\331\322\017\077\055\321\314
7187
-\100\242\211\146\110\036\040\263\234\043\131\163\251\104\163\274
7188
-\044\171\220\126\067\263\306\051\176\243\017\361\051\071\357\176
7189
-\134\050\062\160\065\254\332\270\310\165\146\374\233\114\071\107
7190
-\216\033\157\233\115\002\124\042\063\357\141\272\236\051\204\357
7191
-\116\113\063\107\166\227\152\313\176\137\375\025\246\236\102\103
7192
-\133\146\132\212\210\015\367\026\271\077\121\145\053\146\152\213
7193
-\321\070\122\242\326\106\021\372\374\232\034\164\236\217\227\013
7194
-\002\117\144\306\365\150\323\113\055\377\244\067\036\213\077\277
7195
-\104\276\141\106\241\204\075\010\047\114\201\040\167\211\010\352
7196
-\147\100\136\154\010\121\137\064\132\214\226\150\315\327\367\211
7197
-\302\034\323\062\000\257\122\313\323\140\133\052\072\107\176\153
7198
-\060\063\241\142\051\177\112\271\341\055\347\024\043\016\016\030
7199
-\107\341\171\374\025\125\320\261\374\045\161\143\165\063\034\043
7200
-\053\257\134\331\355\107\167\140\016\073\017\036\322\300\334\144
7201
-\005\211\374\170\326\134\054\046\103\251
7202
-END
7203
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
7204
-
7205
-# Trust for Certificate "AC Raiz Certicamara S.A."
7206
-# Issuer: CN=AC Ra..z Certic..mara S.A.,O=Sociedad Cameral de Certificaci..n Digital - Certic..mara S.A.,C=CO
7207
-# Serial Number:07:7e:52:93:7b:e0:15:e3:57:f0:69:8c:cb:ec:0c
7208
-# Subject: CN=AC Ra..z Certic..mara S.A.,O=Sociedad Cameral de Certificaci..n Digital - Certic..mara S.A.,C=CO
7209
-# Not Valid Before: Mon Nov 27 20:46:29 2006
7210
-# Not Valid After : Tue Apr 02 21:42:02 2030
7211
-# Fingerprint (MD5): 93:2A:3E:F6:FD:23:69:0D:71:20:D4:2B:47:99:2B:A6
7212
-# Fingerprint (SHA1): CB:A1:C5:F8:B0:E3:5E:B8:B9:45:12:D3:F9:34:A2:E9:06:10:D3:36
7213
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
7214
-CKA_TOKEN CK_BBOOL CK_TRUE
7215
-CKA_PRIVATE CK_BBOOL CK_FALSE
7216
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
7217
-CKA_LABEL UTF8 "AC Ra\xC3\xADz Certic\xC3\xA1mara S.A."
7218
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
7219
-\313\241\305\370\260\343\136\270\271\105\022\323\371\064\242\351
7220
-\006\020\323\066
7221
-END
7222
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
7223
-\223\052\076\366\375\043\151\015\161\040\324\053\107\231\053\246
7224
-END
7225
-CKA_ISSUER MULTILINE_OCTAL
7226
-\060\173\061\013\060\011\006\003\125\004\006\023\002\103\117\061
7227
-\107\060\105\006\003\125\004\012\014\076\123\157\143\151\145\144
7228
-\141\144\040\103\141\155\145\162\141\154\040\144\145\040\103\145
7229
-\162\164\151\146\151\143\141\143\151\303\263\156\040\104\151\147
7230
-\151\164\141\154\040\055\040\103\145\162\164\151\143\303\241\155
7231
-\141\162\141\040\123\056\101\056\061\043\060\041\006\003\125\004
7232
-\003\014\032\101\103\040\122\141\303\255\172\040\103\145\162\164
7233
-\151\143\303\241\155\141\162\141\040\123\056\101\056
7234
-END
7235
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
7236
-\002\017\007\176\122\223\173\340\025\343\127\360\151\214\313\354
7237
-\014
7238
-END
7239
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
7240
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
7241
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
7242
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
7243
-
7244
-#
7245 7058
 # Certificate "Deutsche Telekom Root CA 2"
7246 7059
 #
7247 7060
 # Issuer: CN=Deutsche Telekom Root CA 2,OU=T-TeleSec Trust Center,O=Deutsche Telekom AG,C=DE
... ...
@@ -7383,136 +7056,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
7383 7383
 CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
7384 7384
 
7385 7385
 #
7386
-# Certificate "ComSign CA"
7387
-#
7388
-# Issuer: C=IL,O=ComSign,CN=ComSign CA
7389
-# Serial Number:14:13:96:83:14:55:8c:ea:7b:63:e5:fc:34:87:77:44
7390
-# Subject: C=IL,O=ComSign,CN=ComSign CA
7391
-# Not Valid Before: Wed Mar 24 11:32:18 2004
7392
-# Not Valid After : Mon Mar 19 15:02:18 2029
7393
-# Fingerprint (MD5): CD:F4:39:F3:B5:18:50:D7:3E:A4:C5:91:A0:3E:21:4B
7394
-# Fingerprint (SHA1): E1:A4:5B:14:1A:21:DA:1A:79:F4:1A:42:A9:61:D6:69:CD:06:34:C1
7395
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
7396
-CKA_TOKEN CK_BBOOL CK_TRUE
7397
-CKA_PRIVATE CK_BBOOL CK_FALSE
7398
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
7399
-CKA_LABEL UTF8 "ComSign CA"
7400
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
7401
-CKA_SUBJECT MULTILINE_OCTAL
7402
-\060\064\061\023\060\021\006\003\125\004\003\023\012\103\157\155
7403
-\123\151\147\156\040\103\101\061\020\060\016\006\003\125\004\012
7404
-\023\007\103\157\155\123\151\147\156\061\013\060\011\006\003\125
7405
-\004\006\023\002\111\114
7406
-END
7407
-CKA_ID UTF8 "0"
7408
-CKA_ISSUER MULTILINE_OCTAL
7409
-\060\064\061\023\060\021\006\003\125\004\003\023\012\103\157\155
7410
-\123\151\147\156\040\103\101\061\020\060\016\006\003\125\004\012
7411
-\023\007\103\157\155\123\151\147\156\061\013\060\011\006\003\125
7412
-\004\006\023\002\111\114
7413
-END
7414
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
7415
-\002\020\024\023\226\203\024\125\214\352\173\143\345\374\064\207
7416
-\167\104
7417
-END
7418
-CKA_VALUE MULTILINE_OCTAL
7419
-\060\202\003\223\060\202\002\173\240\003\002\001\002\002\020\024
7420
-\023\226\203\024\125\214\352\173\143\345\374\064\207\167\104\060
7421
-\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060\064
7422
-\061\023\060\021\006\003\125\004\003\023\012\103\157\155\123\151
7423
-\147\156\040\103\101\061\020\060\016\006\003\125\004\012\023\007
7424
-\103\157\155\123\151\147\156\061\013\060\011\006\003\125\004\006
7425
-\023\002\111\114\060\036\027\015\060\064\060\063\062\064\061\061
7426
-\063\062\061\070\132\027\015\062\071\060\063\061\071\061\065\060
7427
-\062\061\070\132\060\064\061\023\060\021\006\003\125\004\003\023
7428
-\012\103\157\155\123\151\147\156\040\103\101\061\020\060\016\006
7429
-\003\125\004\012\023\007\103\157\155\123\151\147\156\061\013\060
7430
-\011\006\003\125\004\006\023\002\111\114\060\202\001\042\060\015
7431
-\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001
7432
-\017\000\060\202\001\012\002\202\001\001\000\360\344\124\151\053
7433
-\323\307\217\152\104\344\176\130\047\370\013\320\344\224\022\212
7434
-\361\033\070\070\057\037\061\234\006\324\054\247\336\013\052\256
7435
-\032\240\343\236\152\277\237\074\307\156\242\371\213\144\154\072
7436
-\255\205\125\121\124\245\070\125\270\253\203\004\362\077\144\066
7437
-\367\300\215\103\103\152\146\321\367\027\052\325\357\066\372\060
7438
-\020\102\327\123\315\371\372\063\163\114\263\351\204\040\212\326
7439
-\101\047\065\344\070\372\224\233\270\172\344\171\037\063\373\033
7440
-\330\041\011\050\174\115\030\151\136\144\212\172\031\223\312\176
7441
-\354\363\162\347\067\007\130\131\050\254\102\371\305\377\315\077
7442
-\347\245\372\070\261\320\014\307\331\122\032\123\326\201\314\102
7443
-\172\065\133\355\113\072\172\366\265\216\314\377\017\174\344\140
7444
-\066\207\057\255\360\241\045\175\377\322\113\021\210\160\124\246
7445
-\101\250\147\123\122\102\136\344\064\236\344\276\243\354\252\142
7446
-\135\335\303\114\246\202\101\344\063\013\254\311\063\017\144\202
7447
-\127\052\375\014\255\066\341\014\256\113\305\357\073\231\331\043
7448
-\263\133\135\264\127\354\164\160\014\052\117\002\003\001\000\001
7449
-\243\201\240\060\201\235\060\014\006\003\125\035\023\004\005\060
7450
-\003\001\001\377\060\075\006\003\125\035\037\004\066\060\064\060
7451
-\062\240\060\240\056\206\054\150\164\164\160\072\057\057\146\145
7452
-\144\151\162\056\143\157\155\163\151\147\156\056\143\157\056\151
7453
-\154\057\143\162\154\057\103\157\155\123\151\147\156\103\101\056
7454
-\143\162\154\060\016\006\003\125\035\017\001\001\377\004\004\003
7455
-\002\001\206\060\037\006\003\125\035\043\004\030\060\026\200\024
7456
-\113\001\233\076\126\032\145\066\166\313\173\227\252\222\005\356
7457
-\062\347\050\061\060\035\006\003\125\035\016\004\026\004\024\113
7458
-\001\233\076\126\032\145\066\166\313\173\227\252\222\005\356\062
7459
-\347\050\061\060\015\006\011\052\206\110\206\367\015\001\001\005
7460
-\005\000\003\202\001\001\000\320\331\245\176\376\051\140\105\235
7461
-\176\203\317\156\274\107\156\365\032\236\124\166\102\161\264\074
7462
-\130\077\055\100\045\102\366\201\234\361\211\020\310\016\252\170
7463
-\117\070\011\127\260\074\300\010\374\065\216\361\110\121\215\014
7464
-\161\164\272\204\304\327\162\233\204\174\070\116\144\006\047\052
7465
-\341\247\265\354\010\231\264\012\015\324\205\163\310\022\341\065
7466
-\355\361\005\061\035\163\231\014\353\226\312\335\323\346\205\252
7467
-\360\212\373\165\301\362\011\074\145\145\144\363\114\330\255\313
7468
-\210\151\363\344\203\267\014\275\027\132\226\027\312\133\377\255
7469
-\273\034\351\055\204\200\330\041\276\205\122\331\324\164\271\151
7470
-\205\272\115\355\050\062\353\371\141\112\344\304\066\036\031\334
7471
-\157\204\021\037\225\365\203\050\030\250\063\222\103\047\335\135
7472
-\023\004\105\117\207\325\106\315\075\250\272\360\363\270\126\044
7473
-\105\353\067\307\341\166\117\162\071\030\337\176\164\162\307\163
7474
-\055\071\352\140\346\255\021\242\126\207\173\303\150\232\376\370
7475
-\214\160\250\337\145\062\364\244\100\214\241\302\104\003\016\224
7476
-\000\147\240\161\000\202\110
7477
-END
7478
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
7479
-
7480
-# Trust for Certificate "ComSign CA"
7481
-# Issuer: C=IL,O=ComSign,CN=ComSign CA
7482
-# Serial Number:14:13:96:83:14:55:8c:ea:7b:63:e5:fc:34:87:77:44
7483
-# Subject: C=IL,O=ComSign,CN=ComSign CA
7484
-# Not Valid Before: Wed Mar 24 11:32:18 2004
7485
-# Not Valid After : Mon Mar 19 15:02:18 2029
7486
-# Fingerprint (MD5): CD:F4:39:F3:B5:18:50:D7:3E:A4:C5:91:A0:3E:21:4B
7487
-# Fingerprint (SHA1): E1:A4:5B:14:1A:21:DA:1A:79:F4:1A:42:A9:61:D6:69:CD:06:34:C1
7488
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
7489
-CKA_TOKEN CK_BBOOL CK_TRUE
7490
-CKA_PRIVATE CK_BBOOL CK_FALSE
7491
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
7492
-CKA_LABEL UTF8 "ComSign CA"
7493
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
7494
-\341\244\133\024\032\041\332\032\171\364\032\102\251\141\326\151
7495
-\315\006\064\301
7496
-END
7497
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
7498
-\315\364\071\363\265\030\120\327\076\244\305\221\240\076\041\113
7499
-END
7500
-CKA_ISSUER MULTILINE_OCTAL
7501
-\060\064\061\023\060\021\006\003\125\004\003\023\012\103\157\155
7502
-\123\151\147\156\040\103\101\061\020\060\016\006\003\125\004\012
7503
-\023\007\103\157\155\123\151\147\156\061\013\060\011\006\003\125
7504
-\004\006\023\002\111\114
7505
-END
7506
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
7507
-\002\020\024\023\226\203\024\125\214\352\173\143\345\374\064\207
7508
-\167\104
7509
-END
7510
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
7511
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
7512
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
7513
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
7514
-
7515
-#
7516 7386
 # Certificate "Cybertrust Global Root"
7517 7387
 #
7518 7388
 # Issuer: CN=Cybertrust Global Root,O="Cybertrust, Inc"
... ...
@@ -19150,707 +18693,6 @@ CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
19150 19150
 CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
19151 19151
 
19152 19152
 #
19153
-# Certificate "Certplus Root CA G1"
19154
-#
19155
-# Issuer: CN=Certplus Root CA G1,O=Certplus,C=FR
19156
-# Serial Number:11:20:55:83:e4:2d:3e:54:56:85:2d:83:37:b7:2c:dc:46:11
19157
-# Subject: CN=Certplus Root CA G1,O=Certplus,C=FR
19158
-# Not Valid Before: Mon May 26 00:00:00 2014
19159
-# Not Valid After : Fri Jan 15 00:00:00 2038
19160
-# Fingerprint (SHA-256): 15:2A:40:2B:FC:DF:2C:D5:48:05:4D:22:75:B3:9C:7F:CA:3E:C0:97:80:78:B0:F0:EA:76:E5:61:A6:C7:43:3E
19161
-# Fingerprint (SHA1): 22:FD:D0:B7:FD:A2:4E:0D:AC:49:2C:A0:AC:A6:7B:6A:1F:E3:F7:66
19162
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
19163
-CKA_TOKEN CK_BBOOL CK_TRUE
19164
-CKA_PRIVATE CK_BBOOL CK_FALSE
19165
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19166
-CKA_LABEL UTF8 "Certplus Root CA G1"
19167
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
19168
-CKA_SUBJECT MULTILINE_OCTAL
19169
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19170
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19171
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19172
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\061
19173
-END
19174
-CKA_ID UTF8 "0"
19175
-CKA_ISSUER MULTILINE_OCTAL
19176
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19177
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19178
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19179
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\061
19180
-END
19181
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19182
-\002\022\021\040\125\203\344\055\076\124\126\205\055\203\067\267
19183
-\054\334\106\021
19184
-END
19185
-CKA_VALUE MULTILINE_OCTAL
19186
-\060\202\005\153\060\202\003\123\240\003\002\001\002\002\022\021
19187
-\040\125\203\344\055\076\124\126\205\055\203\067\267\054\334\106
19188
-\021\060\015\006\011\052\206\110\206\367\015\001\001\015\005\000
19189
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19190
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19191
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19192
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\061
19193
-\060\036\027\015\061\064\060\065\062\066\060\060\060\060\060\060
19194
-\132\027\015\063\070\060\061\061\065\060\060\060\060\060\060\132
19195
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19196
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19197
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19198
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\061
19199
-\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001
19200
-\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001
19201
-\000\332\120\207\266\332\270\251\076\235\144\372\126\063\232\126
19202
-\075\026\345\003\225\262\064\034\232\155\142\005\324\330\217\347
19203
-\211\144\237\272\333\144\213\144\346\171\052\141\315\257\217\132
19204
-\211\221\145\271\130\374\264\003\137\221\077\055\020\025\340\176
19205
-\317\274\374\177\103\147\250\255\136\066\043\330\230\263\115\363
19206
-\103\236\071\174\052\374\354\210\325\210\356\160\275\205\026\055
19207
-\352\113\211\074\243\161\102\376\034\375\323\034\055\020\270\206
19208
-\124\352\103\270\333\306\207\332\250\256\200\045\317\172\046\035
19209
-\252\221\260\110\157\256\265\336\236\330\327\372\000\375\306\217
19210
-\320\121\273\142\175\244\261\214\262\377\040\021\272\065\143\005
19211
-\206\107\140\103\063\220\366\107\242\003\117\226\115\235\117\301
19212
-\352\352\234\242\376\064\056\336\267\312\033\166\244\267\255\237
19213
-\351\250\324\170\077\170\376\362\070\011\066\035\322\026\002\310
19214
-\354\052\150\257\365\216\224\357\055\023\172\036\102\112\035\025
19215
-\061\256\014\004\127\374\141\163\363\061\126\206\061\200\240\304
19216
-\021\156\060\166\343\224\360\137\004\304\254\207\162\211\230\305
19217
-\235\314\127\010\232\364\014\374\175\172\005\072\372\107\200\071
19218
-\266\317\204\023\167\157\047\352\377\226\147\027\010\155\351\015
19219
-\326\043\120\060\260\025\164\023\076\345\057\377\016\315\304\013
19220
-\112\135\360\330\000\063\111\146\353\241\030\174\131\056\075\050
19221
-\271\141\161\313\265\245\272\270\352\334\342\160\157\010\152\334
19222
-\207\147\064\357\337\060\162\335\363\311\077\043\377\065\341\276
19223
-\041\051\040\060\201\344\031\245\040\351\045\312\163\061\164\051
19224
-\276\342\102\325\363\262\046\146\307\150\375\031\263\347\040\223
19225
-\231\350\135\340\136\207\347\106\350\045\234\012\051\044\324\315
19226
-\130\206\122\100\044\262\173\017\230\022\040\044\366\220\154\107
19227
-\310\015\273\030\040\056\331\375\374\213\362\051\352\207\164\225
19228
-\340\102\120\170\204\004\101\141\260\364\041\043\217\055\313\050
19229
-\041\362\152\154\364\032\246\305\024\264\067\145\117\225\375\200
19230
-\310\370\162\345\045\153\304\140\261\173\155\216\112\212\163\316
19231
-\131\373\160\172\163\006\023\331\323\164\067\044\101\012\021\157
19232
-\227\334\347\344\176\241\275\025\362\272\207\017\075\150\212\026
19233
-\007\002\003\001\000\001\243\143\060\141\060\016\006\003\125\035
19234
-\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035
19235
-\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125
19236
-\035\016\004\026\004\024\250\301\300\233\221\250\103\025\174\135
19237
-\006\047\264\052\121\330\227\013\201\261\060\037\006\003\125\035
19238
-\043\004\030\060\026\200\024\250\301\300\233\221\250\103\025\174
19239
-\135\006\047\264\052\121\330\227\013\201\261\060\015\006\011\052
19240
-\206\110\206\367\015\001\001\015\005\000\003\202\002\001\000\234
19241
-\126\157\001\176\321\275\114\365\212\306\360\046\037\344\340\070
19242
-\030\314\062\303\051\073\235\101\051\064\141\306\327\360\000\241
19243
-\353\244\162\217\224\027\274\023\054\165\264\127\356\012\174\011
19244
-\172\334\325\312\241\320\064\023\370\167\253\237\345\376\330\036
19245
-\164\212\205\007\217\177\314\171\172\312\226\315\315\375\117\373
19246
-\375\043\015\220\365\364\136\323\306\141\175\236\021\340\002\356
19247
-\011\004\331\007\335\246\212\267\014\203\044\273\203\120\222\376
19248
-\140\165\021\076\330\235\260\212\172\265\340\235\233\313\220\122
19249
-\113\260\223\052\324\076\026\063\345\236\306\145\025\076\144\073
19250
-\004\077\333\014\217\137\134\035\151\037\257\363\351\041\214\363
19251
-\357\227\366\232\267\031\266\204\164\234\243\124\265\160\116\143
19252
-\330\127\135\123\041\233\100\222\103\372\326\167\125\063\117\144
19253
-\325\373\320\054\152\216\155\045\246\357\205\350\002\304\123\076
19254
-\271\236\207\274\314\065\032\336\241\351\212\143\207\145\036\021
19255
-\052\333\143\167\227\024\276\232\024\231\021\262\300\356\260\117
19256
-\370\024\041\062\103\117\237\253\242\313\250\017\252\073\006\125
19257
-\306\022\051\127\010\324\067\327\207\047\255\111\131\247\221\253
19258
-\104\172\136\215\160\333\227\316\110\120\261\163\223\366\360\203
19259
-\140\371\315\361\341\061\375\133\174\161\041\143\024\024\252\257
19260
-\305\336\223\176\150\261\354\042\242\252\220\165\236\265\103\162
19261
-\352\144\243\204\113\375\014\250\046\153\161\227\356\126\143\146
19262
-\350\102\124\371\307\035\337\320\217\133\337\310\060\157\210\376
19263
-\015\304\063\034\123\250\243\375\110\020\362\344\012\116\341\025
19264
-\127\374\156\144\060\302\125\021\334\352\251\315\112\124\254\051
19265
-\143\104\317\112\100\240\326\150\131\033\063\371\357\072\213\333
19266
-\040\222\334\102\204\277\001\253\207\300\325\040\202\333\306\271
19267
-\203\205\102\134\017\103\073\152\111\065\325\230\364\025\277\372
19268
-\141\201\014\011\040\030\322\320\027\014\313\110\000\120\351\166
19269
-\202\214\144\327\072\240\007\125\314\036\061\300\357\072\264\145
19270
-\373\343\277\102\153\236\017\250\275\153\230\334\330\333\313\213
19271
-\244\335\327\131\364\156\335\376\252\303\221\320\056\102\007\300
19272
-\014\115\123\315\044\261\114\133\036\121\364\337\351\222\372
19273
-END
19274
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
19275
-
19276
-# Trust for "Certplus Root CA G1"
19277
-# Issuer: CN=Certplus Root CA G1,O=Certplus,C=FR
19278
-# Serial Number:11:20:55:83:e4:2d:3e:54:56:85:2d:83:37:b7:2c:dc:46:11
19279
-# Subject: CN=Certplus Root CA G1,O=Certplus,C=FR
19280
-# Not Valid Before: Mon May 26 00:00:00 2014
19281
-# Not Valid After : Fri Jan 15 00:00:00 2038
19282
-# Fingerprint (SHA-256): 15:2A:40:2B:FC:DF:2C:D5:48:05:4D:22:75:B3:9C:7F:CA:3E:C0:97:80:78:B0:F0:EA:76:E5:61:A6:C7:43:3E
19283
-# Fingerprint (SHA1): 22:FD:D0:B7:FD:A2:4E:0D:AC:49:2C:A0:AC:A6:7B:6A:1F:E3:F7:66
19284
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
19285
-CKA_TOKEN CK_BBOOL CK_TRUE
19286
-CKA_PRIVATE CK_BBOOL CK_FALSE
19287
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19288
-CKA_LABEL UTF8 "Certplus Root CA G1"
19289
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
19290
-\042\375\320\267\375\242\116\015\254\111\054\240\254\246\173\152
19291
-\037\343\367\146
19292
-END
19293
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
19294
-\177\011\234\367\331\271\134\151\151\126\325\067\076\024\015\102
19295
-END
19296
-CKA_ISSUER MULTILINE_OCTAL
19297
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19298
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19299
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19300
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\061
19301
-END
19302
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19303
-\002\022\021\040\125\203\344\055\076\124\126\205\055\203\067\267
19304
-\054\334\106\021
19305
-END
19306
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19307
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19308
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
19309
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
19310
-
19311
-#
19312
-# Certificate "Certplus Root CA G2"
19313
-#
19314
-# Issuer: CN=Certplus Root CA G2,O=Certplus,C=FR
19315
-# Serial Number:11:20:d9:91:ce:ae:a3:e8:c5:e7:ff:e9:02:af:cf:73:bc:55
19316
-# Subject: CN=Certplus Root CA G2,O=Certplus,C=FR
19317
-# Not Valid Before: Mon May 26 00:00:00 2014
19318
-# Not Valid After : Fri Jan 15 00:00:00 2038
19319
-# Fingerprint (SHA-256): 6C:C0:50:41:E6:44:5E:74:69:6C:4C:FB:C9:F8:0F:54:3B:7E:AB:BB:44:B4:CE:6F:78:7C:6A:99:71:C4:2F:17
19320
-# Fingerprint (SHA1): 4F:65:8E:1F:E9:06:D8:28:02:E9:54:47:41:C9:54:25:5D:69:CC:1A
19321
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
19322
-CKA_TOKEN CK_BBOOL CK_TRUE
19323
-CKA_PRIVATE CK_BBOOL CK_FALSE
19324
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19325
-CKA_LABEL UTF8 "Certplus Root CA G2"
19326
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
19327
-CKA_SUBJECT MULTILINE_OCTAL
19328
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19329
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19330
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19331
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\062
19332
-END
19333
-CKA_ID UTF8 "0"
19334
-CKA_ISSUER MULTILINE_OCTAL
19335
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19336
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19337
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19338
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\062
19339
-END
19340
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19341
-\002\022\021\040\331\221\316\256\243\350\305\347\377\351\002\257
19342
-\317\163\274\125
19343
-END
19344
-CKA_VALUE MULTILINE_OCTAL
19345
-\060\202\002\034\060\202\001\242\240\003\002\001\002\002\022\021
19346
-\040\331\221\316\256\243\350\305\347\377\351\002\257\317\163\274
19347
-\125\060\012\006\010\052\206\110\316\075\004\003\003\060\076\061
19348
-\013\060\011\006\003\125\004\006\023\002\106\122\061\021\060\017
19349
-\006\003\125\004\012\014\010\103\145\162\164\160\154\165\163\061
19350
-\034\060\032\006\003\125\004\003\014\023\103\145\162\164\160\154
19351
-\165\163\040\122\157\157\164\040\103\101\040\107\062\060\036\027
19352
-\015\061\064\060\065\062\066\060\060\060\060\060\060\132\027\015
19353
-\063\070\060\061\061\065\060\060\060\060\060\060\132\060\076\061
19354
-\013\060\011\006\003\125\004\006\023\002\106\122\061\021\060\017
19355
-\006\003\125\004\012\014\010\103\145\162\164\160\154\165\163\061
19356
-\034\060\032\006\003\125\004\003\014\023\103\145\162\164\160\154
19357
-\165\163\040\122\157\157\164\040\103\101\040\107\062\060\166\060
19358
-\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000
19359
-\042\003\142\000\004\315\017\133\126\202\337\360\105\032\326\255
19360
-\367\171\360\035\311\254\226\326\236\116\234\037\264\102\021\312
19361
-\206\277\155\373\205\243\305\345\031\134\327\356\246\077\151\147
19362
-\330\170\342\246\311\304\333\055\171\056\347\213\215\002\157\061
19363
-\042\115\006\343\140\162\105\235\016\102\167\236\316\317\345\177
19364
-\205\233\030\344\374\314\056\162\323\026\223\116\312\231\143\134
19365
-\241\005\052\154\006\243\143\060\141\060\016\006\003\125\035\017
19366
-\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023
19367
-\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035
19368
-\016\004\026\004\024\332\203\143\002\171\216\332\114\306\074\043
19369
-\024\330\217\303\040\253\050\140\131\060\037\006\003\125\035\043
19370
-\004\030\060\026\200\024\332\203\143\002\171\216\332\114\306\074
19371
-\043\024\330\217\303\040\253\050\140\131\060\012\006\010\052\206
19372
-\110\316\075\004\003\003\003\150\000\060\145\002\060\160\376\260
19373
-\013\331\367\203\227\354\363\125\035\324\334\263\006\016\376\063
19374
-\230\235\213\071\220\153\224\041\355\266\327\135\326\114\327\041
19375
-\247\347\277\041\017\053\315\367\052\334\205\007\235\002\061\000
19376
-\206\024\026\345\334\260\145\302\300\216\024\237\277\044\026\150
19377
-\345\274\371\171\151\334\255\105\053\367\266\061\163\314\006\245
19378
-\123\223\221\032\223\256\160\152\147\272\327\236\345\141\032\137
19379
-END
19380
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
19381
-
19382
-# Trust for "Certplus Root CA G2"
19383
-# Issuer: CN=Certplus Root CA G2,O=Certplus,C=FR
19384
-# Serial Number:11:20:d9:91:ce:ae:a3:e8:c5:e7:ff:e9:02:af:cf:73:bc:55
19385
-# Subject: CN=Certplus Root CA G2,O=Certplus,C=FR
19386
-# Not Valid Before: Mon May 26 00:00:00 2014
19387
-# Not Valid After : Fri Jan 15 00:00:00 2038
19388
-# Fingerprint (SHA-256): 6C:C0:50:41:E6:44:5E:74:69:6C:4C:FB:C9:F8:0F:54:3B:7E:AB:BB:44:B4:CE:6F:78:7C:6A:99:71:C4:2F:17
19389
-# Fingerprint (SHA1): 4F:65:8E:1F:E9:06:D8:28:02:E9:54:47:41:C9:54:25:5D:69:CC:1A
19390
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
19391
-CKA_TOKEN CK_BBOOL CK_TRUE
19392
-CKA_PRIVATE CK_BBOOL CK_FALSE
19393
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19394
-CKA_LABEL UTF8 "Certplus Root CA G2"
19395
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
19396
-\117\145\216\037\351\006\330\050\002\351\124\107\101\311\124\045
19397
-\135\151\314\032
19398
-END
19399
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
19400
-\247\356\304\170\055\033\356\055\271\051\316\326\247\226\062\061
19401
-END
19402
-CKA_ISSUER MULTILINE_OCTAL
19403
-\060\076\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19404
-\021\060\017\006\003\125\004\012\014\010\103\145\162\164\160\154
19405
-\165\163\061\034\060\032\006\003\125\004\003\014\023\103\145\162
19406
-\164\160\154\165\163\040\122\157\157\164\040\103\101\040\107\062
19407
-END
19408
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19409
-\002\022\021\040\331\221\316\256\243\350\305\347\377\351\002\257
19410
-\317\163\274\125
19411
-END
19412
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19413
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19414
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
19415
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
19416
-
19417
-#
19418
-# Certificate "OpenTrust Root CA G1"
19419
-#
19420
-# Issuer: CN=OpenTrust Root CA G1,O=OpenTrust,C=FR
19421
-# Serial Number:11:20:b3:90:55:39:7d:7f:36:6d:64:c2:a7:9f:6b:63:8e:67
19422
-# Subject: CN=OpenTrust Root CA G1,O=OpenTrust,C=FR
19423
-# Not Valid Before: Mon May 26 08:45:50 2014
19424
-# Not Valid After : Fri Jan 15 00:00:00 2038
19425
-# Fingerprint (SHA-256): 56:C7:71:28:D9:8C:18:D9:1B:4C:FD:FF:BC:25:EE:91:03:D4:75:8E:A2:AB:AD:82:6A:90:F3:45:7D:46:0E:B4
19426
-# Fingerprint (SHA1): 79:91:E8:34:F7:E2:EE:DD:08:95:01:52:E9:55:2D:14:E9:58:D5:7E
19427
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
19428
-CKA_TOKEN CK_BBOOL CK_TRUE
19429
-CKA_PRIVATE CK_BBOOL CK_FALSE
19430
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19431
-CKA_LABEL UTF8 "OpenTrust Root CA G1"
19432
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
19433
-CKA_SUBJECT MULTILINE_OCTAL
19434
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19435
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19436
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19437
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19438
-\107\061
19439
-END
19440
-CKA_ID UTF8 "0"
19441
-CKA_ISSUER MULTILINE_OCTAL
19442
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19443
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19444
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19445
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19446
-\107\061
19447
-END
19448
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19449
-\002\022\021\040\263\220\125\071\175\177\066\155\144\302\247\237
19450
-\153\143\216\147
19451
-END
19452
-CKA_VALUE MULTILINE_OCTAL
19453
-\060\202\005\157\060\202\003\127\240\003\002\001\002\002\022\021
19454
-\040\263\220\125\071\175\177\066\155\144\302\247\237\153\143\216
19455
-\147\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000
19456
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19457
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19458
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19459
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19460
-\107\061\060\036\027\015\061\064\060\065\062\066\060\070\064\065
19461
-\065\060\132\027\015\063\070\060\061\061\065\060\060\060\060\060
19462
-\060\132\060\100\061\013\060\011\006\003\125\004\006\023\002\106
19463
-\122\061\022\060\020\006\003\125\004\012\014\011\117\160\145\156
19464
-\124\162\165\163\164\061\035\060\033\006\003\125\004\003\014\024
19465
-\117\160\145\156\124\162\165\163\164\040\122\157\157\164\040\103
19466
-\101\040\107\061\060\202\002\042\060\015\006\011\052\206\110\206
19467
-\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012
19468
-\002\202\002\001\000\370\171\106\332\226\305\060\136\212\161\003
19469
-\055\160\244\273\260\305\010\334\315\346\065\300\200\244\021\055
19470
-\335\346\207\256\135\075\221\322\207\154\067\267\332\142\236\233
19471
-\302\044\327\217\361\333\246\246\337\106\157\121\246\161\313\076
19472
-\033\061\147\142\367\021\133\064\047\325\171\116\214\233\130\275
19473
-\042\020\015\134\047\014\335\060\345\250\323\135\041\070\164\027
19474
-\376\343\037\266\117\073\153\055\333\175\140\037\214\175\114\005
19475
-\302\353\001\026\025\230\024\216\321\220\167\042\077\354\302\071
19476
-\270\171\072\360\111\044\342\225\221\334\141\064\222\214\124\164
19477
-\357\261\175\214\001\342\070\175\301\137\152\137\044\262\216\142
19478
-\027\255\171\040\255\253\035\267\340\264\226\110\117\146\103\020
19479
-\006\026\044\003\341\340\234\216\306\106\117\216\032\231\341\217
19480
-\271\216\063\154\151\336\130\255\240\016\247\144\124\021\151\104
19481
-\146\117\114\022\247\216\054\175\304\324\133\305\000\064\060\301
19482
-\331\231\376\062\316\007\204\264\116\315\012\377\066\115\142\361
19483
-\247\143\127\344\333\152\247\256\277\053\271\311\346\262\047\211
19484
-\345\176\232\034\115\150\306\301\030\336\063\053\121\106\113\034
19485
-\216\367\075\014\371\212\064\024\304\373\063\065\043\361\314\361
19486
-\052\307\245\273\260\242\316\376\123\153\115\101\033\146\050\262
19487
-\226\372\247\256\012\116\271\071\063\104\234\164\301\223\034\370
19488
-\340\236\044\045\103\361\233\043\202\252\337\054\040\260\334\066
19489
-\116\003\263\174\002\324\346\173\032\252\207\023\277\076\241\164
19490
-\273\233\016\341\300\223\237\327\244\146\312\273\033\073\343\060
19491
-\364\063\131\212\007\162\003\125\347\163\152\003\061\156\157\226
19492
-\033\343\242\237\257\222\307\355\365\102\267\045\114\073\023\004
19493
-\317\034\226\257\034\042\243\320\253\005\262\114\022\043\122\334
19494
-\375\031\133\047\234\036\073\172\375\102\043\333\043\200\023\360
19495
-\274\121\025\124\224\246\167\076\320\164\121\275\121\024\010\071
19496
-\067\313\037\064\251\060\235\122\204\056\125\220\261\272\337\125
19497
-\000\013\330\126\055\261\111\111\162\200\251\142\327\300\366\030
19498
-\021\004\125\315\164\173\317\141\160\171\364\173\054\134\134\222
19499
-\374\345\270\132\253\114\223\225\241\047\356\245\276\317\161\043
19500
-\102\272\233\166\055\002\003\001\000\001\243\143\060\141\060\016
19501
-\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060\017
19502
-\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060
19503
-\035\006\003\125\035\016\004\026\004\024\227\106\041\127\041\065
19504
-\332\066\125\307\363\361\067\160\345\010\366\223\051\266\060\037
19505
-\006\003\125\035\043\004\030\060\026\200\024\227\106\041\127\041
19506
-\065\332\066\125\307\363\361\067\160\345\010\366\223\051\266\060
19507
-\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202
19508
-\002\001\000\035\335\002\140\174\340\065\247\346\230\173\352\104
19509
-\316\147\100\117\362\223\156\146\324\071\211\046\254\323\115\004
19510
-\074\273\207\041\077\067\364\161\045\332\113\272\253\226\202\201
19511
-\221\266\355\331\261\244\145\227\342\157\144\131\244\226\356\140
19512
-\312\037\043\373\105\272\377\217\044\360\312\251\061\177\171\037
19513
-\200\263\055\062\272\144\147\140\257\271\131\315\337\232\111\323
19514
-\250\202\261\371\230\224\212\314\340\273\340\004\033\231\140\261
19515
-\106\145\334\010\242\262\106\236\104\210\352\223\176\127\026\322
19516
-\025\162\137\056\113\253\324\235\143\270\343\110\345\376\204\056
19517
-\130\012\237\103\035\376\267\030\222\206\103\113\016\234\062\206
19518
-\054\140\365\351\110\352\225\355\160\051\361\325\057\375\065\264
19519
-\127\317\333\205\110\231\271\302\157\154\217\315\170\225\254\144
19520
-\050\375\126\260\303\157\303\276\131\122\341\137\204\217\200\362
19521
-\364\015\066\255\166\263\243\265\341\144\166\072\130\334\175\117
19522
-\136\126\154\345\125\131\127\245\337\361\212\146\060\214\324\122
19523
-\142\070\167\264\276\050\327\312\066\304\233\005\360\370\025\333
19524
-\333\361\357\064\235\035\170\112\210\126\147\156\140\377\217\310
19525
-\213\341\216\275\102\251\063\012\131\102\022\022\052\372\261\235
19526
-\103\216\005\233\231\332\142\255\127\066\263\035\266\015\171\055
19527
-\226\270\353\362\014\113\014\245\224\306\060\247\046\031\055\355
19528
-\114\006\120\060\361\375\130\075\271\113\027\137\031\264\152\204
19529
-\124\264\070\117\071\242\015\226\150\303\050\224\375\355\055\037
19530
-\112\153\103\226\056\220\001\020\373\070\246\201\013\320\277\165
19531
-\323\324\271\316\361\077\157\016\034\036\067\161\345\030\207\165
19532
-\031\077\120\271\136\244\105\064\255\260\312\346\345\023\166\017
19533
-\061\024\251\216\055\224\326\325\205\115\163\025\117\113\362\262
19534
-\076\355\154\275\375\016\235\146\163\260\075\264\367\277\250\340
19535
-\021\244\304\256\165\011\112\143\000\110\040\246\306\235\013\011
19536
-\212\264\340\346\316\076\307\076\046\070\351\053\336\246\010\111
19537
-\003\004\220\212\351\217\277\350\266\264\052\243\043\215\034\034
19538
-\262\071\222\250\217\002\134\100\071\165\324\163\101\002\167\336
19539
-\315\340\103\207\326\344\272\112\303\154\022\177\376\052\346\043
19540
-\326\214\161
19541
-END
19542
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
19543
-
19544
-# Trust for "OpenTrust Root CA G1"
19545
-# Issuer: CN=OpenTrust Root CA G1,O=OpenTrust,C=FR
19546
-# Serial Number:11:20:b3:90:55:39:7d:7f:36:6d:64:c2:a7:9f:6b:63:8e:67
19547
-# Subject: CN=OpenTrust Root CA G1,O=OpenTrust,C=FR
19548
-# Not Valid Before: Mon May 26 08:45:50 2014
19549
-# Not Valid After : Fri Jan 15 00:00:00 2038
19550
-# Fingerprint (SHA-256): 56:C7:71:28:D9:8C:18:D9:1B:4C:FD:FF:BC:25:EE:91:03:D4:75:8E:A2:AB:AD:82:6A:90:F3:45:7D:46:0E:B4
19551
-# Fingerprint (SHA1): 79:91:E8:34:F7:E2:EE:DD:08:95:01:52:E9:55:2D:14:E9:58:D5:7E
19552
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
19553
-CKA_TOKEN CK_BBOOL CK_TRUE
19554
-CKA_PRIVATE CK_BBOOL CK_FALSE
19555
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19556
-CKA_LABEL UTF8 "OpenTrust Root CA G1"
19557
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
19558
-\171\221\350\064\367\342\356\335\010\225\001\122\351\125\055\024
19559
-\351\130\325\176
19560
-END
19561
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
19562
-\166\000\314\201\051\315\125\136\210\152\172\056\367\115\071\332
19563
-END
19564
-CKA_ISSUER MULTILINE_OCTAL
19565
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19566
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19567
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19568
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19569
-\107\061
19570
-END
19571
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19572
-\002\022\021\040\263\220\125\071\175\177\066\155\144\302\247\237
19573
-\153\143\216\147
19574
-END
19575
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19576
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19577
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
19578
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
19579
-
19580
-#
19581
-# Certificate "OpenTrust Root CA G2"
19582
-#
19583
-# Issuer: CN=OpenTrust Root CA G2,O=OpenTrust,C=FR
19584
-# Serial Number:11:20:a1:69:1b:bf:bd:b9:bd:52:96:8f:23:e8:48:bf:26:11
19585
-# Subject: CN=OpenTrust Root CA G2,O=OpenTrust,C=FR
19586
-# Not Valid Before: Mon May 26 00:00:00 2014
19587
-# Not Valid After : Fri Jan 15 00:00:00 2038
19588
-# Fingerprint (SHA-256): 27:99:58:29:FE:6A:75:15:C1:BF:E8:48:F9:C4:76:1D:B1:6C:22:59:29:25:7B:F4:0D:08:94:F2:9E:A8:BA:F2
19589
-# Fingerprint (SHA1): 79:5F:88:60:C5:AB:7C:3D:92:E6:CB:F4:8D:E1:45:CD:11:EF:60:0B
19590
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
19591
-CKA_TOKEN CK_BBOOL CK_TRUE
19592
-CKA_PRIVATE CK_BBOOL CK_FALSE
19593
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19594
-CKA_LABEL UTF8 "OpenTrust Root CA G2"
19595
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
19596
-CKA_SUBJECT MULTILINE_OCTAL
19597
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19598
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19599
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19600
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19601
-\107\062
19602
-END
19603
-CKA_ID UTF8 "0"
19604
-CKA_ISSUER MULTILINE_OCTAL
19605
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19606
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19607
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19608
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19609
-\107\062
19610
-END
19611
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19612
-\002\022\021\040\241\151\033\277\275\271\275\122\226\217\043\350
19613
-\110\277\046\021
19614
-END
19615
-CKA_VALUE MULTILINE_OCTAL
19616
-\060\202\005\157\060\202\003\127\240\003\002\001\002\002\022\021
19617
-\040\241\151\033\277\275\271\275\122\226\217\043\350\110\277\046
19618
-\021\060\015\006\011\052\206\110\206\367\015\001\001\015\005\000
19619
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19620
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19621
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19622
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19623
-\107\062\060\036\027\015\061\064\060\065\062\066\060\060\060\060
19624
-\060\060\132\027\015\063\070\060\061\061\065\060\060\060\060\060
19625
-\060\132\060\100\061\013\060\011\006\003\125\004\006\023\002\106
19626
-\122\061\022\060\020\006\003\125\004\012\014\011\117\160\145\156
19627
-\124\162\165\163\164\061\035\060\033\006\003\125\004\003\014\024
19628
-\117\160\145\156\124\162\165\163\164\040\122\157\157\164\040\103
19629
-\101\040\107\062\060\202\002\042\060\015\006\011\052\206\110\206
19630
-\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012
19631
-\002\202\002\001\000\314\266\127\245\063\224\020\201\062\123\337
19632
-\141\176\017\166\071\317\134\302\123\165\035\111\172\226\070\335
19633
-\242\163\152\361\157\336\136\242\132\271\161\041\276\066\331\241
19634
-\374\274\356\154\250\174\064\032\161\032\350\032\330\137\016\104
19635
-\006\355\247\340\363\322\141\013\340\062\242\226\321\070\360\302
19636
-\332\001\027\374\344\254\117\350\356\211\036\164\253\117\277\036
19637
-\011\266\066\152\126\363\341\356\226\211\146\044\006\344\315\102
19638
-\072\112\335\340\232\260\304\202\105\263\376\311\253\134\174\076
19639
-\311\353\027\057\014\175\156\256\245\217\310\254\045\012\157\372
19640
-\325\105\230\322\065\011\366\003\103\224\376\331\277\040\225\171
19641
-\200\230\212\331\211\065\273\121\033\244\067\175\374\231\073\253
19642
-\377\277\254\015\217\103\261\231\173\026\020\176\035\157\107\304
19643
-\025\217\004\226\010\006\102\004\370\204\326\035\274\221\246\102
19644
-\276\111\325\152\210\077\274\055\121\321\236\215\340\122\314\127
19645
-\335\065\065\130\333\264\217\044\210\344\213\337\334\153\124\322
19646
-\201\053\262\316\222\113\034\037\106\372\035\330\222\313\166\147
19647
-\265\011\231\011\345\254\027\024\125\160\306\074\240\126\012\003
19648
-\263\334\142\031\337\310\265\060\177\365\074\046\165\021\275\327
19649
-\033\263\207\236\007\257\145\161\345\240\317\032\247\011\020\035
19650
-\223\211\146\133\350\074\142\062\265\265\072\156\351\205\001\213
19651
-\236\103\214\147\163\050\131\133\353\343\334\054\314\245\046\162
19652
-\142\022\264\346\234\203\104\366\121\244\342\300\172\044\127\312
19653
-\016\245\077\072\265\073\213\345\166\356\160\346\222\336\026\134
19654
-\050\133\227\031\047\222\376\172\222\124\316\223\071\012\026\207
19655
-\274\143\263\365\261\223\134\340\156\267\320\352\371\142\062\210
19656
-\104\373\277\047\050\266\060\225\135\022\050\271\225\276\217\123
19657
-\030\345\242\030\026\342\126\244\262\054\020\365\035\067\246\370
19658
-\267\366\320\131\134\211\367\302\325\265\224\164\321\325\376\033
19659
-\266\360\346\326\036\173\322\074\313\250\343\365\030\363\041\037
19660
-\156\357\115\150\006\173\055\135\156\103\211\246\300\371\240\277
19661
-\202\036\317\123\177\264\353\054\333\135\366\152\175\100\044\005
19662
-\162\211\070\001\223\313\161\302\071\135\006\021\366\157\170\370
19663
-\067\015\071\204\047\002\003\001\000\001\243\143\060\141\060\016
19664
-\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060\017
19665
-\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060
19666
-\035\006\003\125\035\016\004\026\004\024\152\071\372\102\042\367
19667
-\346\211\000\115\136\175\063\203\313\270\156\167\206\257\060\037
19668
-\006\003\125\035\043\004\030\060\026\200\024\152\071\372\102\042
19669
-\367\346\211\000\115\136\175\063\203\313\270\156\167\206\257\060
19670
-\015\006\011\052\206\110\206\367\015\001\001\015\005\000\003\202
19671
-\002\001\000\230\313\253\100\074\345\063\002\227\177\055\207\246
19672
-\217\324\136\112\257\270\036\347\273\161\373\200\144\045\251\263
19673
-\032\076\150\135\047\046\247\272\052\341\360\127\203\012\144\117
19674
-\036\042\164\033\351\220\137\360\254\317\377\117\150\172\070\244
19675
-\020\154\015\261\307\244\167\200\030\266\242\050\104\166\247\064
19676
-\235\161\204\057\312\131\322\107\210\231\101\042\311\060\230\141
19677
-\156\075\250\250\005\155\321\037\300\121\104\126\177\047\065\002
19678
-\335\136\230\012\102\353\060\277\215\241\233\121\252\073\352\223
19679
-\106\144\305\000\171\336\041\153\366\127\240\206\327\006\162\354
19680
-\160\106\113\213\163\335\240\041\165\076\334\035\300\217\323\117
19681
-\163\034\205\331\376\177\142\310\225\157\266\323\173\214\272\123
19682
-\302\157\233\104\114\171\320\035\160\263\327\237\002\364\262\007
19683
-\260\307\345\370\255\043\016\246\126\311\051\022\167\110\331\057
19684
-\106\375\073\360\374\164\160\222\245\216\070\010\037\144\060\266
19685
-\267\113\373\066\254\020\216\240\122\063\143\235\003\065\126\305
19686
-\151\275\306\043\132\047\224\366\244\022\370\055\063\074\241\126
19687
-\245\137\326\031\351\355\174\010\275\167\315\047\144\314\224\332
19688
-\116\106\120\207\340\371\301\123\200\036\273\255\373\107\122\213
19689
-\033\375\242\371\336\016\042\267\075\063\131\154\324\336\365\225
19690
-\006\062\015\121\031\101\134\076\117\006\367\271\053\200\047\366
19691
-\243\252\172\174\006\341\103\303\023\071\142\032\066\275\340\050
19692
-\056\224\002\344\051\056\140\125\256\100\075\260\164\222\136\360
19693
-\040\144\226\077\137\105\135\210\265\212\332\002\240\133\105\124
19694
-\336\070\075\011\300\250\112\145\106\026\374\252\277\124\116\115
19695
-\133\276\070\103\267\050\312\213\063\252\032\045\272\045\134\051
19696
-\057\133\112\156\214\352\055\234\052\366\005\166\340\167\227\200
19697
-\210\335\147\023\157\035\150\044\213\117\267\164\201\345\364\140
19698
-\237\172\125\327\076\067\332\026\153\076\167\254\256\030\160\225
19699
-\010\171\051\003\212\376\301\073\263\077\032\017\244\073\136\037
19700
-\130\241\225\311\253\057\163\112\320\055\156\232\131\017\125\030
19701
-\170\055\074\121\246\227\213\346\273\262\160\252\114\021\336\377
19702
-\174\053\067\324\172\321\167\064\217\347\371\102\367\074\201\014
19703
-\113\122\012
19704
-END
19705
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
19706
-
19707
-# Trust for "OpenTrust Root CA G2"
19708
-# Issuer: CN=OpenTrust Root CA G2,O=OpenTrust,C=FR
19709
-# Serial Number:11:20:a1:69:1b:bf:bd:b9:bd:52:96:8f:23:e8:48:bf:26:11
19710
-# Subject: CN=OpenTrust Root CA G2,O=OpenTrust,C=FR
19711
-# Not Valid Before: Mon May 26 00:00:00 2014
19712
-# Not Valid After : Fri Jan 15 00:00:00 2038
19713
-# Fingerprint (SHA-256): 27:99:58:29:FE:6A:75:15:C1:BF:E8:48:F9:C4:76:1D:B1:6C:22:59:29:25:7B:F4:0D:08:94:F2:9E:A8:BA:F2
19714
-# Fingerprint (SHA1): 79:5F:88:60:C5:AB:7C:3D:92:E6:CB:F4:8D:E1:45:CD:11:EF:60:0B
19715
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
19716
-CKA_TOKEN CK_BBOOL CK_TRUE
19717
-CKA_PRIVATE CK_BBOOL CK_FALSE
19718
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19719
-CKA_LABEL UTF8 "OpenTrust Root CA G2"
19720
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
19721
-\171\137\210\140\305\253\174\075\222\346\313\364\215\341\105\315
19722
-\021\357\140\013
19723
-END
19724
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
19725
-\127\044\266\131\044\153\256\310\376\034\014\040\362\300\116\353
19726
-END
19727
-CKA_ISSUER MULTILINE_OCTAL
19728
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19729
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19730
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19731
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19732
-\107\062
19733
-END
19734
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19735
-\002\022\021\040\241\151\033\277\275\271\275\122\226\217\043\350
19736
-\110\277\046\021
19737
-END
19738
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19739
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19740
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
19741
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
19742
-
19743
-#
19744
-# Certificate "OpenTrust Root CA G3"
19745
-#
19746
-# Issuer: CN=OpenTrust Root CA G3,O=OpenTrust,C=FR
19747
-# Serial Number:11:20:e6:f8:4c:fc:24:b0:be:05:40:ac:da:83:1b:34:60:3f
19748
-# Subject: CN=OpenTrust Root CA G3,O=OpenTrust,C=FR
19749
-# Not Valid Before: Mon May 26 00:00:00 2014
19750
-# Not Valid After : Fri Jan 15 00:00:00 2038
19751
-# Fingerprint (SHA-256): B7:C3:62:31:70:6E:81:07:8C:36:7C:B8:96:19:8F:1E:32:08:DD:92:69:49:DD:8F:57:09:A4:10:F7:5B:62:92
19752
-# Fingerprint (SHA1): 6E:26:64:F3:56:BF:34:55:BF:D1:93:3F:7C:01:DE:D8:13:DA:8A:A6
19753
-CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
19754
-CKA_TOKEN CK_BBOOL CK_TRUE
19755
-CKA_PRIVATE CK_BBOOL CK_FALSE
19756
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19757
-CKA_LABEL UTF8 "OpenTrust Root CA G3"
19758
-CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
19759
-CKA_SUBJECT MULTILINE_OCTAL
19760
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19761
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19762
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19763
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19764
-\107\063
19765
-END
19766
-CKA_ID UTF8 "0"
19767
-CKA_ISSUER MULTILINE_OCTAL
19768
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19769
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19770
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19771
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19772
-\107\063
19773
-END
19774
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19775
-\002\022\021\040\346\370\114\374\044\260\276\005\100\254\332\203
19776
-\033\064\140\077
19777
-END
19778
-CKA_VALUE MULTILINE_OCTAL
19779
-\060\202\002\041\060\202\001\246\240\003\002\001\002\002\022\021
19780
-\040\346\370\114\374\044\260\276\005\100\254\332\203\033\064\140
19781
-\077\060\012\006\010\052\206\110\316\075\004\003\003\060\100\061
19782
-\013\060\011\006\003\125\004\006\023\002\106\122\061\022\060\020
19783
-\006\003\125\004\012\014\011\117\160\145\156\124\162\165\163\164
19784
-\061\035\060\033\006\003\125\004\003\014\024\117\160\145\156\124
19785
-\162\165\163\164\040\122\157\157\164\040\103\101\040\107\063\060
19786
-\036\027\015\061\064\060\065\062\066\060\060\060\060\060\060\132
19787
-\027\015\063\070\060\061\061\065\060\060\060\060\060\060\132\060
19788
-\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061\022
19789
-\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162\165
19790
-\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160\145
19791
-\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040\107
19792
-\063\060\166\060\020\006\007\052\206\110\316\075\002\001\006\005
19793
-\053\201\004\000\042\003\142\000\004\112\356\130\256\115\312\146
19794
-\336\006\072\243\021\374\340\030\360\156\034\272\055\060\014\211
19795
-\331\326\356\233\163\203\251\043\025\214\057\131\212\132\335\024
19796
-\352\235\131\053\103\267\006\354\062\266\272\356\101\265\255\135
19797
-\241\205\314\352\035\024\146\243\147\176\106\342\224\363\347\266
19798
-\126\241\025\131\241\117\067\227\271\042\036\275\021\353\364\262
19799
-\037\136\303\024\232\345\331\227\231\243\143\060\141\060\016\006
19800
-\003\125\035\017\001\001\377\004\004\003\002\001\006\060\017\006
19801
-\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060\035
19802
-\006\003\125\035\016\004\026\004\024\107\167\303\024\213\142\071
19803
-\014\311\157\341\120\115\320\020\130\334\225\210\155\060\037\006
19804
-\003\125\035\043\004\030\060\026\200\024\107\167\303\024\213\142
19805
-\071\014\311\157\341\120\115\320\020\130\334\225\210\155\060\012
19806
-\006\010\052\206\110\316\075\004\003\003\003\151\000\060\146\002
19807
-\061\000\217\250\334\235\272\014\004\027\372\025\351\075\057\051
19808
-\001\227\277\201\026\063\100\223\154\374\371\355\200\160\157\252
19809
-\217\333\204\302\213\365\065\312\006\334\144\157\150\026\341\217
19810
-\221\271\002\061\000\330\113\245\313\302\320\010\154\351\030\373
19811
-\132\335\115\137\044\013\260\000\041\045\357\217\247\004\046\161
19812
-\342\174\151\345\135\232\370\101\037\073\071\223\223\235\125\352
19813
-\315\215\361\373\301
19814
-END
19815
-CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
19816
-
19817
-# Trust for "OpenTrust Root CA G3"
19818
-# Issuer: CN=OpenTrust Root CA G3,O=OpenTrust,C=FR
19819
-# Serial Number:11:20:e6:f8:4c:fc:24:b0:be:05:40:ac:da:83:1b:34:60:3f
19820
-# Subject: CN=OpenTrust Root CA G3,O=OpenTrust,C=FR
19821
-# Not Valid Before: Mon May 26 00:00:00 2014
19822
-# Not Valid After : Fri Jan 15 00:00:00 2038
19823
-# Fingerprint (SHA-256): B7:C3:62:31:70:6E:81:07:8C:36:7C:B8:96:19:8F:1E:32:08:DD:92:69:49:DD:8F:57:09:A4:10:F7:5B:62:92
19824
-# Fingerprint (SHA1): 6E:26:64:F3:56:BF:34:55:BF:D1:93:3F:7C:01:DE:D8:13:DA:8A:A6
19825
-CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
19826
-CKA_TOKEN CK_BBOOL CK_TRUE
19827
-CKA_PRIVATE CK_BBOOL CK_FALSE
19828
-CKA_MODIFIABLE CK_BBOOL CK_FALSE
19829
-CKA_LABEL UTF8 "OpenTrust Root CA G3"
19830
-CKA_CERT_SHA1_HASH MULTILINE_OCTAL
19831
-\156\046\144\363\126\277\064\125\277\321\223\077\174\001\336\330
19832
-\023\332\212\246
19833
-END
19834
-CKA_CERT_MD5_HASH MULTILINE_OCTAL
19835
-\041\067\264\027\026\222\173\147\106\160\251\226\327\250\023\044
19836
-END
19837
-CKA_ISSUER MULTILINE_OCTAL
19838
-\060\100\061\013\060\011\006\003\125\004\006\023\002\106\122\061
19839
-\022\060\020\006\003\125\004\012\014\011\117\160\145\156\124\162
19840
-\165\163\164\061\035\060\033\006\003\125\004\003\014\024\117\160
19841
-\145\156\124\162\165\163\164\040\122\157\157\164\040\103\101\040
19842
-\107\063
19843
-END
19844
-CKA_SERIAL_NUMBER MULTILINE_OCTAL
19845
-\002\022\021\040\346\370\114\374\044\260\276\005\100\254\332\203
19846
-\033\064\140\077
19847
-END
19848
-CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19849
-CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
19850
-CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
19851
-CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
19852
-
19853
-#
19854 19153
 # Certificate "ISRG Root X1"
19855 19154
 #
19856 19155
 # Issuer: CN=ISRG Root X1,O=Internet Security Research Group,C=US
... ...
@@ -22994,3 +21836,1996 @@ CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
22994 22994
 CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
22995 22995
 CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
22996 22996
 CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
22997
+
22998
+#
22999
+# Certificate "GlobalSign Root CA - R6"
23000
+#
23001
+# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R6
23002
+# Serial Number:45:e6:bb:03:83:33:c3:85:65:48:e6:ff:45:51
23003
+# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R6
23004
+# Not Valid Before: Wed Dec 10 00:00:00 2014
23005
+# Not Valid After : Sun Dec 10 00:00:00 2034
23006
+# Fingerprint (SHA-256): 2C:AB:EA:FE:37:D0:6C:A2:2A:BA:73:91:C0:03:3D:25:98:29:52:C4:53:64:73:49:76:3A:3A:B5:AD:6C:CF:69
23007
+# Fingerprint (SHA1): 80:94:64:0E:B5:A7:A1:CA:11:9C:1F:DD:D5:9F:81:02:63:A7:FB:D1
23008
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23009
+CKA_TOKEN CK_BBOOL CK_TRUE
23010
+CKA_PRIVATE CK_BBOOL CK_FALSE
23011
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23012
+CKA_LABEL UTF8 "GlobalSign Root CA - R6"
23013
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23014
+CKA_SUBJECT MULTILINE_OCTAL
23015
+\060\114\061\040\060\036\006\003\125\004\013\023\027\107\154\157
23016
+\142\141\154\123\151\147\156\040\122\157\157\164\040\103\101\040
23017
+\055\040\122\066\061\023\060\021\006\003\125\004\012\023\012\107
23018
+\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125
23019
+\004\003\023\012\107\154\157\142\141\154\123\151\147\156
23020
+END
23021
+CKA_ID UTF8 "0"
23022
+CKA_ISSUER MULTILINE_OCTAL
23023
+\060\114\061\040\060\036\006\003\125\004\013\023\027\107\154\157
23024
+\142\141\154\123\151\147\156\040\122\157\157\164\040\103\101\040
23025
+\055\040\122\066\061\023\060\021\006\003\125\004\012\023\012\107
23026
+\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125
23027
+\004\003\023\012\107\154\157\142\141\154\123\151\147\156
23028
+END
23029
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23030
+\002\016\105\346\273\003\203\063\303\205\145\110\346\377\105\121
23031
+END
23032
+CKA_VALUE MULTILINE_OCTAL
23033
+\060\202\005\203\060\202\003\153\240\003\002\001\002\002\016\105
23034
+\346\273\003\203\063\303\205\145\110\346\377\105\121\060\015\006
23035
+\011\052\206\110\206\367\015\001\001\014\005\000\060\114\061\040
23036
+\060\036\006\003\125\004\013\023\027\107\154\157\142\141\154\123
23037
+\151\147\156\040\122\157\157\164\040\103\101\040\055\040\122\066
23038
+\061\023\060\021\006\003\125\004\012\023\012\107\154\157\142\141
23039
+\154\123\151\147\156\061\023\060\021\006\003\125\004\003\023\012
23040
+\107\154\157\142\141\154\123\151\147\156\060\036\027\015\061\064
23041
+\061\062\061\060\060\060\060\060\060\060\132\027\015\063\064\061
23042
+\062\061\060\060\060\060\060\060\060\132\060\114\061\040\060\036
23043
+\006\003\125\004\013\023\027\107\154\157\142\141\154\123\151\147
23044
+\156\040\122\157\157\164\040\103\101\040\055\040\122\066\061\023
23045
+\060\021\006\003\125\004\012\023\012\107\154\157\142\141\154\123
23046
+\151\147\156\061\023\060\021\006\003\125\004\003\023\012\107\154
23047
+\157\142\141\154\123\151\147\156\060\202\002\042\060\015\006\011
23048
+\052\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000
23049
+\060\202\002\012\002\202\002\001\000\225\007\350\163\312\146\371
23050
+\354\024\312\173\074\367\015\010\361\264\105\013\054\202\264\110
23051
+\306\353\133\074\256\203\270\101\222\063\024\244\157\177\351\052
23052
+\314\306\260\210\153\305\266\211\321\306\262\377\024\316\121\024
23053
+\041\354\112\335\033\132\306\326\207\356\115\072\025\006\355\144
23054
+\146\013\222\200\312\104\336\163\224\116\363\247\211\177\117\170
23055
+\143\010\310\022\120\155\102\146\057\115\271\171\050\115\122\032
23056
+\212\032\200\267\031\201\016\176\304\212\274\144\114\041\034\103
23057
+\150\327\075\074\212\305\262\146\325\220\232\267\061\006\305\276
23058
+\342\155\062\006\246\036\371\271\353\252\243\270\277\276\202\143
23059
+\120\320\360\030\211\337\344\017\171\365\352\242\037\052\322\160
23060
+\056\173\347\274\223\273\155\123\342\110\174\214\020\007\070\377
23061
+\146\262\167\141\176\340\352\214\074\252\264\244\366\363\225\112
23062
+\022\007\155\375\214\262\211\317\320\240\141\167\310\130\164\260
23063
+\324\043\072\367\135\072\312\242\333\235\011\336\135\104\055\220
23064
+\361\201\315\127\222\372\176\274\120\004\143\064\337\153\223\030
23065
+\276\153\066\262\071\344\254\044\066\267\360\357\266\034\023\127
23066
+\223\266\336\262\370\342\205\267\163\242\270\065\252\105\362\340
23067
+\235\066\241\157\124\212\361\162\126\156\056\210\305\121\102\104
23068
+\025\224\356\243\305\070\226\233\116\116\132\013\107\363\006\066
23069
+\111\167\060\274\161\067\345\246\354\041\010\165\374\346\141\026
23070
+\077\167\325\331\221\227\204\012\154\324\002\115\164\300\024\355
23071
+\375\071\373\203\362\136\024\241\004\260\013\351\376\356\217\341
23072
+\156\013\262\010\263\141\146\011\152\261\006\072\145\226\131\300
23073
+\360\065\375\311\332\050\215\032\021\207\160\201\012\250\232\165
23074
+\035\236\072\206\005\000\236\333\200\326\045\371\334\005\236\047
23075
+\131\114\166\071\133\352\371\245\241\330\203\017\321\377\337\060
23076
+\021\371\205\317\063\110\365\312\155\144\024\054\172\130\117\323
23077
+\113\010\111\305\225\144\032\143\016\171\075\365\263\214\312\130
23078
+\255\234\102\105\171\156\016\207\031\134\124\261\145\266\277\214
23079
+\233\334\023\351\015\157\270\056\334\147\156\311\213\021\265\204
23080
+\024\212\000\031\160\203\171\221\227\221\324\032\047\277\067\036
23081
+\062\007\330\024\143\074\050\114\257\002\003\001\000\001\243\143
23082
+\060\141\060\016\006\003\125\035\017\001\001\377\004\004\003\002
23083
+\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003
23084
+\001\001\377\060\035\006\003\125\035\016\004\026\004\024\256\154
23085
+\005\243\223\023\342\242\347\342\327\034\326\307\360\177\310\147
23086
+\123\240\060\037\006\003\125\035\043\004\030\060\026\200\024\256
23087
+\154\005\243\223\023\342\242\347\342\327\034\326\307\360\177\310
23088
+\147\123\240\060\015\006\011\052\206\110\206\367\015\001\001\014
23089
+\005\000\003\202\002\001\000\203\045\355\350\321\375\225\122\315
23090
+\236\300\004\240\221\151\346\134\320\204\336\334\255\242\117\350
23091
+\107\170\326\145\230\251\133\250\074\207\174\002\212\321\156\267
23092
+\026\163\346\137\300\124\230\325\164\276\301\315\342\021\221\255
23093
+\043\030\075\335\341\162\104\226\264\225\136\300\173\216\231\170
23094
+\026\103\023\126\127\263\242\263\073\265\167\334\100\162\254\243
23095
+\353\233\065\076\261\010\041\241\347\304\103\067\171\062\276\265
23096
+\347\234\054\114\274\103\051\231\216\060\323\254\041\340\343\035
23097
+\372\330\007\063\166\124\000\042\052\271\115\040\056\160\150\332
23098
+\345\123\374\203\134\323\235\362\377\104\014\104\146\362\322\343
23099
+\275\106\000\032\155\002\272\045\135\215\241\061\121\335\124\106
23100
+\034\115\333\231\226\357\032\034\004\134\246\025\357\170\340\171
23101
+\376\135\333\076\252\114\125\375\232\025\251\157\341\246\373\337
23102
+\160\060\351\303\356\102\106\355\302\223\005\211\372\175\143\173
23103
+\077\320\161\201\174\000\350\230\256\016\170\064\303\045\373\257
23104
+\012\237\040\153\335\073\023\217\022\214\342\101\032\110\172\163
23105
+\240\167\151\307\266\134\177\202\310\036\376\130\033\050\053\250
23106
+\154\255\136\155\300\005\322\173\267\353\200\376\045\067\376\002
23107
+\233\150\254\102\135\303\356\365\314\334\360\120\165\322\066\151
23108
+\234\346\173\004\337\156\006\151\266\336\012\011\110\131\207\353
23109
+\173\024\140\172\144\252\151\103\357\221\307\114\354\030\335\154
23110
+\357\123\055\214\231\341\136\362\162\076\317\124\310\275\147\354
23111
+\244\017\114\105\377\323\271\060\043\007\114\217\020\277\206\226
23112
+\331\231\132\264\231\127\034\244\314\273\025\211\123\272\054\005
23113
+\017\344\304\236\031\261\030\064\325\114\235\272\355\367\037\257
23114
+\044\225\004\170\250\003\273\356\201\345\332\137\174\213\112\241
23115
+\220\164\045\247\263\076\113\310\054\126\275\307\310\357\070\342
23116
+\134\222\360\171\367\234\204\272\164\055\141\001\040\176\176\321
23117
+\362\117\007\131\137\213\055\103\122\353\106\014\224\341\365\146
23118
+\107\171\167\325\124\133\037\255\044\067\313\105\132\116\240\104
23119
+\110\310\330\260\231\305\025\204\011\366\326\111\111\300\145\270
23120
+\346\032\161\156\240\250\361\202\350\105\076\154\326\002\327\012
23121
+\147\203\005\132\311\244\020
23122
+END
23123
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23124
+
23125
+# Trust for "GlobalSign Root CA - R6"
23126
+# Issuer: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R6
23127
+# Serial Number:45:e6:bb:03:83:33:c3:85:65:48:e6:ff:45:51
23128
+# Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R6
23129
+# Not Valid Before: Wed Dec 10 00:00:00 2014
23130
+# Not Valid After : Sun Dec 10 00:00:00 2034
23131
+# Fingerprint (SHA-256): 2C:AB:EA:FE:37:D0:6C:A2:2A:BA:73:91:C0:03:3D:25:98:29:52:C4:53:64:73:49:76:3A:3A:B5:AD:6C:CF:69
23132
+# Fingerprint (SHA1): 80:94:64:0E:B5:A7:A1:CA:11:9C:1F:DD:D5:9F:81:02:63:A7:FB:D1
23133
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23134
+CKA_TOKEN CK_BBOOL CK_TRUE
23135
+CKA_PRIVATE CK_BBOOL CK_FALSE
23136
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23137
+CKA_LABEL UTF8 "GlobalSign Root CA - R6"
23138
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23139
+\200\224\144\016\265\247\241\312\021\234\037\335\325\237\201\002
23140
+\143\247\373\321
23141
+END
23142
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23143
+\117\335\007\344\324\042\144\071\036\014\067\102\352\321\306\256
23144
+END
23145
+CKA_ISSUER MULTILINE_OCTAL
23146
+\060\114\061\040\060\036\006\003\125\004\013\023\027\107\154\157
23147
+\142\141\154\123\151\147\156\040\122\157\157\164\040\103\101\040
23148
+\055\040\122\066\061\023\060\021\006\003\125\004\012\023\012\107
23149
+\154\157\142\141\154\123\151\147\156\061\023\060\021\006\003\125
23150
+\004\003\023\012\107\154\157\142\141\154\123\151\147\156
23151
+END
23152
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23153
+\002\016\105\346\273\003\203\063\303\205\145\110\346\377\105\121
23154
+END
23155
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23156
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23157
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23158
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23159
+
23160
+#
23161
+# Certificate "OISTE WISeKey Global Root GC CA"
23162
+#
23163
+# Issuer: CN=OISTE WISeKey Global Root GC CA,OU=OISTE Foundation Endorsed,O=WISeKey,C=CH
23164
+# Serial Number:21:2a:56:0c:ae:da:0c:ab:40:45:bf:2b:a2:2d:3a:ea
23165
+# Subject: CN=OISTE WISeKey Global Root GC CA,OU=OISTE Foundation Endorsed,O=WISeKey,C=CH
23166
+# Not Valid Before: Tue May 09 09:48:34 2017
23167
+# Not Valid After : Fri May 09 09:58:33 2042
23168
+# Fingerprint (SHA-256): 85:60:F9:1C:36:24:DA:BA:95:70:B5:FE:A0:DB:E3:6F:F1:1A:83:23:BE:94:86:85:4F:B3:F3:4A:55:71:19:8D
23169
+# Fingerprint (SHA1): E0:11:84:5E:34:DE:BE:88:81:B9:9C:F6:16:26:D1:96:1F:C3:B9:31
23170
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23171
+CKA_TOKEN CK_BBOOL CK_TRUE
23172
+CKA_PRIVATE CK_BBOOL CK_FALSE
23173
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23174
+CKA_LABEL UTF8 "OISTE WISeKey Global Root GC CA"
23175
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23176
+CKA_SUBJECT MULTILINE_OCTAL
23177
+\060\155\061\013\060\011\006\003\125\004\006\023\002\103\110\061
23178
+\020\060\016\006\003\125\004\012\023\007\127\111\123\145\113\145
23179
+\171\061\042\060\040\006\003\125\004\013\023\031\117\111\123\124
23180
+\105\040\106\157\165\156\144\141\164\151\157\156\040\105\156\144
23181
+\157\162\163\145\144\061\050\060\046\006\003\125\004\003\023\037
23182
+\117\111\123\124\105\040\127\111\123\145\113\145\171\040\107\154
23183
+\157\142\141\154\040\122\157\157\164\040\107\103\040\103\101
23184
+END
23185
+CKA_ID UTF8 "0"
23186
+CKA_ISSUER MULTILINE_OCTAL
23187
+\060\155\061\013\060\011\006\003\125\004\006\023\002\103\110\061
23188
+\020\060\016\006\003\125\004\012\023\007\127\111\123\145\113\145
23189
+\171\061\042\060\040\006\003\125\004\013\023\031\117\111\123\124
23190
+\105\040\106\157\165\156\144\141\164\151\157\156\040\105\156\144
23191
+\157\162\163\145\144\061\050\060\046\006\003\125\004\003\023\037
23192
+\117\111\123\124\105\040\127\111\123\145\113\145\171\040\107\154
23193
+\157\142\141\154\040\122\157\157\164\040\107\103\040\103\101
23194
+END
23195
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23196
+\002\020\041\052\126\014\256\332\014\253\100\105\277\053\242\055
23197
+\072\352
23198
+END
23199
+CKA_VALUE MULTILINE_OCTAL
23200
+\060\202\002\151\060\202\001\357\240\003\002\001\002\002\020\041
23201
+\052\126\014\256\332\014\253\100\105\277\053\242\055\072\352\060
23202
+\012\006\010\052\206\110\316\075\004\003\003\060\155\061\013\060
23203
+\011\006\003\125\004\006\023\002\103\110\061\020\060\016\006\003
23204
+\125\004\012\023\007\127\111\123\145\113\145\171\061\042\060\040
23205
+\006\003\125\004\013\023\031\117\111\123\124\105\040\106\157\165
23206
+\156\144\141\164\151\157\156\040\105\156\144\157\162\163\145\144
23207
+\061\050\060\046\006\003\125\004\003\023\037\117\111\123\124\105
23208
+\040\127\111\123\145\113\145\171\040\107\154\157\142\141\154\040
23209
+\122\157\157\164\040\107\103\040\103\101\060\036\027\015\061\067
23210
+\060\065\060\071\060\071\064\070\063\064\132\027\015\064\062\060
23211
+\065\060\071\060\071\065\070\063\063\132\060\155\061\013\060\011
23212
+\006\003\125\004\006\023\002\103\110\061\020\060\016\006\003\125
23213
+\004\012\023\007\127\111\123\145\113\145\171\061\042\060\040\006
23214
+\003\125\004\013\023\031\117\111\123\124\105\040\106\157\165\156
23215
+\144\141\164\151\157\156\040\105\156\144\157\162\163\145\144\061
23216
+\050\060\046\006\003\125\004\003\023\037\117\111\123\124\105\040
23217
+\127\111\123\145\113\145\171\040\107\154\157\142\141\154\040\122
23218
+\157\157\164\040\107\103\040\103\101\060\166\060\020\006\007\052
23219
+\206\110\316\075\002\001\006\005\053\201\004\000\042\003\142\000
23220
+\004\114\351\120\300\306\017\162\030\274\330\361\272\263\211\342
23221
+\171\112\243\026\247\153\124\044\333\121\377\352\364\011\044\303
23222
+\013\042\237\313\152\047\202\201\015\322\300\257\061\344\164\202
23223
+\156\312\045\331\214\165\235\361\333\320\232\242\113\041\176\026
23224
+\247\143\220\322\071\324\261\207\170\137\030\226\017\120\033\065
23225
+\067\017\152\306\334\331\023\115\244\216\220\067\346\275\133\061
23226
+\221\243\124\060\122\060\016\006\003\125\035\017\001\001\377\004
23227
+\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377\004
23228
+\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026\004
23229
+\024\110\207\024\254\343\303\236\220\140\072\327\312\211\356\323
23230
+\255\214\264\120\146\060\020\006\011\053\006\001\004\001\202\067
23231
+\025\001\004\003\002\001\000\060\012\006\010\052\206\110\316\075
23232
+\004\003\003\003\150\000\060\145\002\060\046\307\151\133\334\325
23233
+\347\262\347\310\014\214\214\303\335\171\214\033\143\325\311\122
23234
+\224\116\115\202\112\163\036\262\200\204\251\045\300\114\132\155
23235
+\111\051\140\170\023\342\176\110\353\144\002\061\000\333\064\040
23236
+\062\010\377\232\111\002\266\210\336\024\257\135\154\231\161\215
23237
+\032\077\213\327\340\242\066\206\034\007\202\072\166\123\375\302
23238
+\242\355\357\173\260\200\117\130\017\113\123\071\275
23239
+END
23240
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23241
+
23242
+# Trust for "OISTE WISeKey Global Root GC CA"
23243
+# Issuer: CN=OISTE WISeKey Global Root GC CA,OU=OISTE Foundation Endorsed,O=WISeKey,C=CH
23244
+# Serial Number:21:2a:56:0c:ae:da:0c:ab:40:45:bf:2b:a2:2d:3a:ea
23245
+# Subject: CN=OISTE WISeKey Global Root GC CA,OU=OISTE Foundation Endorsed,O=WISeKey,C=CH
23246
+# Not Valid Before: Tue May 09 09:48:34 2017
23247
+# Not Valid After : Fri May 09 09:58:33 2042
23248
+# Fingerprint (SHA-256): 85:60:F9:1C:36:24:DA:BA:95:70:B5:FE:A0:DB:E3:6F:F1:1A:83:23:BE:94:86:85:4F:B3:F3:4A:55:71:19:8D
23249
+# Fingerprint (SHA1): E0:11:84:5E:34:DE:BE:88:81:B9:9C:F6:16:26:D1:96:1F:C3:B9:31
23250
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23251
+CKA_TOKEN CK_BBOOL CK_TRUE
23252
+CKA_PRIVATE CK_BBOOL CK_FALSE
23253
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23254
+CKA_LABEL UTF8 "OISTE WISeKey Global Root GC CA"
23255
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23256
+\340\021\204\136\064\336\276\210\201\271\234\366\026\046\321\226
23257
+\037\303\271\061
23258
+END
23259
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23260
+\251\326\271\055\057\223\144\370\245\151\312\221\351\150\007\043
23261
+END
23262
+CKA_ISSUER MULTILINE_OCTAL
23263
+\060\155\061\013\060\011\006\003\125\004\006\023\002\103\110\061
23264
+\020\060\016\006\003\125\004\012\023\007\127\111\123\145\113\145
23265
+\171\061\042\060\040\006\003\125\004\013\023\031\117\111\123\124
23266
+\105\040\106\157\165\156\144\141\164\151\157\156\040\105\156\144
23267
+\157\162\163\145\144\061\050\060\046\006\003\125\004\003\023\037
23268
+\117\111\123\124\105\040\127\111\123\145\113\145\171\040\107\154
23269
+\157\142\141\154\040\122\157\157\164\040\107\103\040\103\101
23270
+END
23271
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23272
+\002\020\041\052\126\014\256\332\014\253\100\105\277\053\242\055
23273
+\072\352
23274
+END
23275
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23276
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23277
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23278
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23279
+
23280
+#
23281
+# Certificate "GTS Root R1"
23282
+#
23283
+# Issuer: CN=GTS Root R1,O=Google Trust Services LLC,C=US
23284
+# Serial Number:6e:47:a9:c5:4b:47:0c:0d:ec:33:d0:89:b9:1c:f4:e1
23285
+# Subject: CN=GTS Root R1,O=Google Trust Services LLC,C=US
23286
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23287
+# Not Valid After : Sun Jun 22 00:00:00 2036
23288
+# Fingerprint (SHA-256): 2A:57:54:71:E3:13:40:BC:21:58:1C:BD:2C:F1:3E:15:84:63:20:3E:CE:94:BC:F9:D3:CC:19:6B:F0:9A:54:72
23289
+# Fingerprint (SHA1): E1:C9:50:E6:EF:22:F8:4C:56:45:72:8B:92:20:60:D7:D5:A7:A3:E8
23290
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23291
+CKA_TOKEN CK_BBOOL CK_TRUE
23292
+CKA_PRIVATE CK_BBOOL CK_FALSE
23293
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23294
+CKA_LABEL UTF8 "GTS Root R1"
23295
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23296
+CKA_SUBJECT MULTILINE_OCTAL
23297
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23298
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23299
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23300
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23301
+\123\040\122\157\157\164\040\122\061
23302
+END
23303
+CKA_ID UTF8 "0"
23304
+CKA_ISSUER MULTILINE_OCTAL
23305
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23306
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23307
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23308
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23309
+\123\040\122\157\157\164\040\122\061
23310
+END
23311
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23312
+\002\020\156\107\251\305\113\107\014\015\354\063\320\211\271\034
23313
+\364\341
23314
+END
23315
+CKA_VALUE MULTILINE_OCTAL
23316
+\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\156
23317
+\107\251\305\113\107\014\015\354\063\320\211\271\034\364\341\060
23318
+\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\107
23319
+\061\013\060\011\006\003\125\004\006\023\002\125\123\061\042\060
23320
+\040\006\003\125\004\012\023\031\107\157\157\147\154\145\040\124
23321
+\162\165\163\164\040\123\145\162\166\151\143\145\163\040\114\114
23322
+\103\061\024\060\022\006\003\125\004\003\023\013\107\124\123\040
23323
+\122\157\157\164\040\122\061\060\036\027\015\061\066\060\066\062
23324
+\062\060\060\060\060\060\060\132\027\015\063\066\060\066\062\062
23325
+\060\060\060\060\060\060\132\060\107\061\013\060\011\006\003\125
23326
+\004\006\023\002\125\123\061\042\060\040\006\003\125\004\012\023
23327
+\031\107\157\157\147\154\145\040\124\162\165\163\164\040\123\145
23328
+\162\166\151\143\145\163\040\114\114\103\061\024\060\022\006\003
23329
+\125\004\003\023\013\107\124\123\040\122\157\157\164\040\122\061
23330
+\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001
23331
+\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001
23332
+\000\266\021\002\213\036\343\241\167\233\073\334\277\224\076\267
23333
+\225\247\100\074\241\375\202\371\175\062\006\202\161\366\366\214
23334
+\177\373\350\333\274\152\056\227\227\243\214\113\371\053\366\261
23335
+\371\316\204\035\261\371\305\227\336\357\271\362\243\351\274\022
23336
+\211\136\247\252\122\253\370\043\047\313\244\261\234\143\333\327
23337
+\231\176\360\012\136\353\150\246\364\306\132\107\015\115\020\063
23338
+\343\116\261\023\243\310\030\154\113\354\374\011\220\337\235\144
23339
+\051\045\043\007\241\264\322\075\056\140\340\317\322\011\207\273
23340
+\315\110\360\115\302\302\172\210\212\273\272\317\131\031\326\257
23341
+\217\260\007\260\236\061\361\202\301\300\337\056\246\155\154\031
23342
+\016\265\330\176\046\032\105\003\075\260\171\244\224\050\255\017
23343
+\177\046\345\250\010\376\226\350\074\150\224\123\356\203\072\210
23344
+\053\025\226\011\262\340\172\214\056\165\326\234\353\247\126\144
23345
+\217\226\117\150\256\075\227\302\204\217\300\274\100\300\013\134
23346
+\275\366\207\263\065\154\254\030\120\177\204\340\114\315\222\323
23347
+\040\351\063\274\122\231\257\062\265\051\263\045\052\264\110\371
23348
+\162\341\312\144\367\346\202\020\215\350\235\302\212\210\372\070
23349
+\146\212\374\143\371\001\371\170\375\173\134\167\372\166\207\372
23350
+\354\337\261\016\171\225\127\264\275\046\357\326\001\321\353\026
23351
+\012\273\216\013\265\305\305\212\125\253\323\254\352\221\113\051
23352
+\314\031\244\062\045\116\052\361\145\104\320\002\316\252\316\111
23353
+\264\352\237\174\203\260\100\173\347\103\253\247\154\243\217\175
23354
+\211\201\372\114\245\377\325\216\303\316\113\340\265\330\263\216
23355
+\105\317\166\300\355\100\053\375\123\017\260\247\325\073\015\261
23356
+\212\242\003\336\061\255\314\167\352\157\173\076\326\337\221\042
23357
+\022\346\276\372\330\062\374\020\143\024\121\162\336\135\326\026
23358
+\223\275\051\150\063\357\072\146\354\007\212\046\337\023\327\127
23359
+\145\170\047\336\136\111\024\000\242\000\177\232\250\041\266\251
23360
+\261\225\260\245\271\015\026\021\332\307\154\110\074\100\340\176
23361
+\015\132\315\126\074\321\227\005\271\313\113\355\071\113\234\304
23362
+\077\322\125\023\156\044\260\326\161\372\364\301\272\314\355\033
23363
+\365\376\201\101\330\000\230\075\072\310\256\172\230\067\030\005
23364
+\225\002\003\001\000\001\243\102\060\100\060\016\006\003\125\035
23365
+\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035
23366
+\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125
23367
+\035\016\004\026\004\024\344\257\053\046\161\032\053\110\047\205
23368
+\057\122\146\054\357\360\211\023\161\076\060\015\006\011\052\206
23369
+\110\206\367\015\001\001\014\005\000\003\202\002\001\000\070\226
23370
+\012\356\075\264\226\036\137\357\235\234\013\063\237\053\340\312
23371
+\375\322\216\012\037\101\164\245\174\252\204\324\345\362\036\346
23372
+\067\122\062\234\013\321\141\035\277\050\301\266\104\051\065\165
23373
+\167\230\262\174\331\275\164\254\212\150\343\251\061\011\051\001
23374
+\140\163\343\107\174\123\250\220\112\047\357\113\327\237\223\347
23375
+\202\066\316\232\150\014\202\347\317\324\020\026\157\137\016\231
23376
+\134\366\037\161\175\357\357\173\057\176\352\066\326\227\160\013
23377
+\025\356\327\134\126\152\063\245\343\111\070\014\270\175\373\215
23378
+\205\244\261\131\136\364\152\341\335\241\366\144\104\256\346\121
23379
+\203\041\146\306\021\076\363\316\107\356\234\050\037\045\332\377
23380
+\254\146\225\335\065\017\134\357\040\054\142\375\221\272\251\314
23381
+\374\132\234\223\201\203\051\227\112\174\132\162\264\071\320\267
23382
+\167\313\171\375\151\072\222\067\355\156\070\145\106\176\351\140
23383
+\275\171\210\227\137\070\022\364\356\257\133\202\310\206\325\341
23384
+\231\155\214\004\362\166\272\111\366\156\351\155\036\137\240\357
23385
+\047\202\166\100\370\246\323\130\134\017\054\102\332\102\306\173
23386
+\210\064\307\301\330\105\233\301\076\305\141\035\331\143\120\111
23387
+\366\064\205\152\340\030\305\156\107\253\101\102\051\233\366\140
23388
+\015\322\061\323\143\230\043\223\132\000\201\110\264\357\315\212
23389
+\315\311\317\231\356\331\236\252\066\341\150\113\161\111\024\066
23390
+\050\072\075\035\316\232\217\045\346\200\161\141\053\265\173\314
23391
+\371\045\026\201\341\061\137\241\243\176\026\244\234\026\152\227
23392
+\030\275\166\162\245\013\236\035\066\346\057\241\057\276\160\221
23393
+\017\250\346\332\370\304\222\100\154\045\176\173\263\011\334\262
23394
+\027\255\200\104\360\150\245\217\224\165\377\164\132\350\250\002
23395
+\174\014\011\342\251\113\013\240\205\013\142\271\357\241\061\222
23396
+\373\357\366\121\004\211\154\350\251\164\241\273\027\263\265\375
23397
+\111\017\174\074\354\203\030\040\103\116\325\223\272\264\064\261
23398
+\037\026\066\037\014\346\144\071\026\114\334\340\376\035\310\251
23399
+\142\075\100\352\312\305\064\002\264\256\211\210\063\065\334\054
23400
+\023\163\330\047\361\320\162\356\165\073\042\336\230\150\146\133
23401
+\361\306\143\107\125\034\272\245\010\121\165\246\110\045
23402
+END
23403
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23404
+
23405
+# Trust for "GTS Root R1"
23406
+# Issuer: CN=GTS Root R1,O=Google Trust Services LLC,C=US
23407
+# Serial Number:6e:47:a9:c5:4b:47:0c:0d:ec:33:d0:89:b9:1c:f4:e1
23408
+# Subject: CN=GTS Root R1,O=Google Trust Services LLC,C=US
23409
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23410
+# Not Valid After : Sun Jun 22 00:00:00 2036
23411
+# Fingerprint (SHA-256): 2A:57:54:71:E3:13:40:BC:21:58:1C:BD:2C:F1:3E:15:84:63:20:3E:CE:94:BC:F9:D3:CC:19:6B:F0:9A:54:72
23412
+# Fingerprint (SHA1): E1:C9:50:E6:EF:22:F8:4C:56:45:72:8B:92:20:60:D7:D5:A7:A3:E8
23413
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23414
+CKA_TOKEN CK_BBOOL CK_TRUE
23415
+CKA_PRIVATE CK_BBOOL CK_FALSE
23416
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23417
+CKA_LABEL UTF8 "GTS Root R1"
23418
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23419
+\341\311\120\346\357\042\370\114\126\105\162\213\222\040\140\327
23420
+\325\247\243\350
23421
+END
23422
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23423
+\202\032\357\324\322\112\362\237\342\075\227\006\024\160\162\205
23424
+END
23425
+CKA_ISSUER MULTILINE_OCTAL
23426
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23427
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23428
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23429
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23430
+\123\040\122\157\157\164\040\122\061
23431
+END
23432
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23433
+\002\020\156\107\251\305\113\107\014\015\354\063\320\211\271\034
23434
+\364\341
23435
+END
23436
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23437
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23438
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23439
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23440
+
23441
+#
23442
+# Certificate "GTS Root R2"
23443
+#
23444
+# Issuer: CN=GTS Root R2,O=Google Trust Services LLC,C=US
23445
+# Serial Number:6e:47:a9:c6:5a:b3:e7:20:c5:30:9a:3f:68:52:f2:6f
23446
+# Subject: CN=GTS Root R2,O=Google Trust Services LLC,C=US
23447
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23448
+# Not Valid After : Sun Jun 22 00:00:00 2036
23449
+# Fingerprint (SHA-256): C4:5D:7B:B0:8E:6D:67:E6:2E:42:35:11:0B:56:4E:5F:78:FD:92:EF:05:8C:84:0A:EA:4E:64:55:D7:58:5C:60
23450
+# Fingerprint (SHA1): D2:73:96:2A:2A:5E:39:9F:73:3F:E1:C7:1E:64:3F:03:38:34:FC:4D
23451
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23452
+CKA_TOKEN CK_BBOOL CK_TRUE
23453
+CKA_PRIVATE CK_BBOOL CK_FALSE
23454
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23455
+CKA_LABEL UTF8 "GTS Root R2"
23456
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23457
+CKA_SUBJECT MULTILINE_OCTAL
23458
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23459
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23460
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23461
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23462
+\123\040\122\157\157\164\040\122\062
23463
+END
23464
+CKA_ID UTF8 "0"
23465
+CKA_ISSUER MULTILINE_OCTAL
23466
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23467
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23468
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23469
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23470
+\123\040\122\157\157\164\040\122\062
23471
+END
23472
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23473
+\002\020\156\107\251\306\132\263\347\040\305\060\232\077\150\122
23474
+\362\157
23475
+END
23476
+CKA_VALUE MULTILINE_OCTAL
23477
+\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\156
23478
+\107\251\306\132\263\347\040\305\060\232\077\150\122\362\157\060
23479
+\015\006\011\052\206\110\206\367\015\001\001\014\005\000\060\107
23480
+\061\013\060\011\006\003\125\004\006\023\002\125\123\061\042\060
23481
+\040\006\003\125\004\012\023\031\107\157\157\147\154\145\040\124
23482
+\162\165\163\164\040\123\145\162\166\151\143\145\163\040\114\114
23483
+\103\061\024\060\022\006\003\125\004\003\023\013\107\124\123\040
23484
+\122\157\157\164\040\122\062\060\036\027\015\061\066\060\066\062
23485
+\062\060\060\060\060\060\060\132\027\015\063\066\060\066\062\062
23486
+\060\060\060\060\060\060\132\060\107\061\013\060\011\006\003\125
23487
+\004\006\023\002\125\123\061\042\060\040\006\003\125\004\012\023
23488
+\031\107\157\157\147\154\145\040\124\162\165\163\164\040\123\145
23489
+\162\166\151\143\145\163\040\114\114\103\061\024\060\022\006\003
23490
+\125\004\003\023\013\107\124\123\040\122\157\157\164\040\122\062
23491
+\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001
23492
+\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001
23493
+\000\316\336\375\246\373\354\354\024\064\074\007\006\132\154\131
23494
+\367\031\065\335\367\301\235\125\252\323\315\073\244\223\162\357
23495
+\012\372\155\235\366\360\205\200\133\241\110\122\237\071\305\267
23496
+\356\050\254\357\313\166\150\024\271\337\255\001\154\231\037\304
23497
+\042\035\237\376\162\167\340\054\133\257\344\004\277\117\162\240
23498
+\032\064\230\350\071\150\354\225\045\173\166\241\346\151\271\205
23499
+\031\275\211\214\376\255\355\066\352\163\274\377\203\342\313\175
23500
+\301\322\316\112\263\215\005\236\213\111\223\337\301\133\320\156
23501
+\136\360\056\060\056\202\374\372\274\264\027\012\110\345\210\233
23502
+\305\233\153\336\260\312\264\003\360\332\364\220\270\145\144\367
23503
+\134\114\255\350\176\146\136\231\327\270\302\076\310\320\023\235
23504
+\255\356\344\105\173\211\125\367\212\037\142\122\204\022\263\302
23505
+\100\227\343\212\037\107\221\246\164\132\322\370\261\143\050\020
23506
+\270\263\011\270\126\167\100\242\046\230\171\306\376\337\045\356
23507
+\076\345\240\177\324\141\017\121\113\074\077\214\332\341\160\164
23508
+\330\302\150\241\371\301\014\351\241\342\177\273\125\074\166\006
23509
+\356\152\116\314\222\210\060\115\232\275\117\013\110\232\204\265
23510
+\230\243\325\373\163\301\127\141\335\050\126\165\023\256\207\216
23511
+\347\014\121\011\020\165\210\114\274\215\371\173\074\324\042\110
23512
+\037\052\334\353\153\273\104\261\313\063\161\062\106\257\255\112
23513
+\361\214\350\164\072\254\347\032\042\163\200\322\060\367\045\102
23514
+\307\042\073\073\022\255\226\056\306\303\166\007\252\040\267\065
23515
+\111\127\351\222\111\350\166\026\162\061\147\053\226\176\212\243
23516
+\307\224\126\042\277\152\113\176\001\041\262\043\062\337\344\232
23517
+\104\155\131\133\135\365\000\240\034\233\306\170\227\215\220\377
23518
+\233\310\252\264\257\021\121\071\136\331\373\147\255\325\133\021
23519
+\235\062\232\033\275\325\272\133\245\311\313\045\151\123\125\047
23520
+\134\340\312\066\313\210\141\373\036\267\320\313\356\026\373\323
23521
+\246\114\336\222\245\324\342\337\365\006\124\336\056\235\113\264
23522
+\223\060\252\201\316\335\032\334\121\163\015\117\160\351\345\266
23523
+\026\041\031\171\262\346\211\013\165\144\312\325\253\274\011\301
23524
+\030\241\377\324\124\241\205\074\375\024\044\003\262\207\323\244
23525
+\267\002\003\001\000\001\243\102\060\100\060\016\006\003\125\035
23526
+\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035
23527
+\023\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125
23528
+\035\016\004\026\004\024\273\377\312\216\043\237\117\231\312\333
23529
+\342\150\246\245\025\047\027\036\331\016\060\015\006\011\052\206
23530
+\110\206\367\015\001\001\014\005\000\003\202\002\001\000\266\151
23531
+\360\246\167\376\236\356\013\201\255\341\300\251\307\371\065\035
23532
+\100\202\253\346\004\264\337\313\367\035\017\203\360\176\023\115
23533
+\215\214\356\343\063\042\303\071\374\100\337\156\101\113\102\123
23534
+\276\026\210\361\322\070\136\304\150\231\034\230\122\223\214\347
23535
+\150\355\033\152\163\172\005\100\115\177\145\073\326\130\361\316
23536
+\203\107\140\343\377\227\251\234\140\167\030\125\265\176\010\223
23537
+\317\320\366\074\147\003\025\141\011\371\201\171\365\354\123\244
23538
+\237\311\217\001\213\163\304\167\166\334\203\242\365\014\111\032
23539
+\250\166\336\222\233\144\370\263\054\305\047\323\007\300\010\200
23540
+\244\230\222\343\001\226\002\252\002\356\217\073\305\321\155\012
23541
+\063\060\163\170\271\117\124\026\277\013\007\241\244\134\346\313
23542
+\311\134\204\217\017\340\025\167\054\176\046\176\332\304\113\333
23543
+\247\026\167\007\260\315\165\350\162\102\326\225\204\235\206\203
23544
+\362\344\220\315\011\107\324\213\003\160\332\132\306\003\102\364
23545
+\355\067\242\360\033\120\124\113\016\330\204\336\031\050\231\201
23546
+\107\256\011\033\077\110\321\303\157\342\260\140\027\365\356\043
23547
+\002\245\332\000\133\155\220\253\356\242\351\033\073\351\307\104
23548
+\047\105\216\153\237\365\244\204\274\167\371\153\227\254\076\121
23549
+\105\242\021\246\314\205\356\012\150\362\076\120\070\172\044\142
23550
+\036\027\040\067\155\152\115\267\011\233\311\374\244\130\365\266
23551
+\373\234\116\030\273\225\002\347\241\255\233\007\356\066\153\044
23552
+\322\071\206\301\223\203\120\322\201\106\250\137\142\127\054\273
23553
+\154\144\210\010\156\357\023\124\137\335\055\304\147\143\323\317
23554
+\211\067\277\235\040\364\373\172\203\233\240\036\201\000\120\302
23555
+\344\014\042\131\122\020\355\103\126\207\000\370\024\122\247\035
23556
+\213\223\214\242\115\106\177\047\306\161\233\044\336\344\332\206
23557
+\213\015\176\153\040\301\300\236\341\145\330\152\243\246\350\205
23558
+\213\072\007\010\034\272\365\217\125\232\030\165\176\345\354\201
23559
+\146\321\041\163\241\065\104\013\200\075\133\234\136\157\052\027
23560
+\226\321\203\043\210\146\155\346\206\342\160\062\057\122\042\347
23561
+\310\347\177\304\054\140\135\057\303\257\236\105\005\303\204\002
23562
+\267\375\054\010\122\117\202\335\243\360\324\206\011\002
23563
+END
23564
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23565
+
23566
+# Trust for "GTS Root R2"
23567
+# Issuer: CN=GTS Root R2,O=Google Trust Services LLC,C=US
23568
+# Serial Number:6e:47:a9:c6:5a:b3:e7:20:c5:30:9a:3f:68:52:f2:6f
23569
+# Subject: CN=GTS Root R2,O=Google Trust Services LLC,C=US
23570
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23571
+# Not Valid After : Sun Jun 22 00:00:00 2036
23572
+# Fingerprint (SHA-256): C4:5D:7B:B0:8E:6D:67:E6:2E:42:35:11:0B:56:4E:5F:78:FD:92:EF:05:8C:84:0A:EA:4E:64:55:D7:58:5C:60
23573
+# Fingerprint (SHA1): D2:73:96:2A:2A:5E:39:9F:73:3F:E1:C7:1E:64:3F:03:38:34:FC:4D
23574
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23575
+CKA_TOKEN CK_BBOOL CK_TRUE
23576
+CKA_PRIVATE CK_BBOOL CK_FALSE
23577
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23578
+CKA_LABEL UTF8 "GTS Root R2"
23579
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23580
+\322\163\226\052\052\136\071\237\163\077\341\307\036\144\077\003
23581
+\070\064\374\115
23582
+END
23583
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23584
+\104\355\232\016\244\011\073\000\362\256\114\243\306\141\260\213
23585
+END
23586
+CKA_ISSUER MULTILINE_OCTAL
23587
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23588
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23589
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23590
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23591
+\123\040\122\157\157\164\040\122\062
23592
+END
23593
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23594
+\002\020\156\107\251\306\132\263\347\040\305\060\232\077\150\122
23595
+\362\157
23596
+END
23597
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23598
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23599
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23600
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23601
+
23602
+#
23603
+# Certificate "GTS Root R3"
23604
+#
23605
+# Issuer: CN=GTS Root R3,O=Google Trust Services LLC,C=US
23606
+# Serial Number:6e:47:a9:c7:6c:a9:73:24:40:89:0f:03:55:dd:8d:1d
23607
+# Subject: CN=GTS Root R3,O=Google Trust Services LLC,C=US
23608
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23609
+# Not Valid After : Sun Jun 22 00:00:00 2036
23610
+# Fingerprint (SHA-256): 15:D5:B8:77:46:19:EA:7D:54:CE:1C:A6:D0:B0:C4:03:E0:37:A9:17:F1:31:E8:A0:4E:1E:6B:7A:71:BA:BC:E5
23611
+# Fingerprint (SHA1): 30:D4:24:6F:07:FF:DB:91:89:8A:0B:E9:49:66:11:EB:8C:5E:46:E5
23612
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23613
+CKA_TOKEN CK_BBOOL CK_TRUE
23614
+CKA_PRIVATE CK_BBOOL CK_FALSE
23615
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23616
+CKA_LABEL UTF8 "GTS Root R3"
23617
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23618
+CKA_SUBJECT MULTILINE_OCTAL
23619
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23620
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23621
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23622
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23623
+\123\040\122\157\157\164\040\122\063
23624
+END
23625
+CKA_ID UTF8 "0"
23626
+CKA_ISSUER MULTILINE_OCTAL
23627
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23628
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23629
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23630
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23631
+\123\040\122\157\157\164\040\122\063
23632
+END
23633
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23634
+\002\020\156\107\251\307\154\251\163\044\100\211\017\003\125\335
23635
+\215\035
23636
+END
23637
+CKA_VALUE MULTILINE_OCTAL
23638
+\060\202\002\014\060\202\001\221\240\003\002\001\002\002\020\156
23639
+\107\251\307\154\251\163\044\100\211\017\003\125\335\215\035\060
23640
+\012\006\010\052\206\110\316\075\004\003\003\060\107\061\013\060
23641
+\011\006\003\125\004\006\023\002\125\123\061\042\060\040\006\003
23642
+\125\004\012\023\031\107\157\157\147\154\145\040\124\162\165\163
23643
+\164\040\123\145\162\166\151\143\145\163\040\114\114\103\061\024
23644
+\060\022\006\003\125\004\003\023\013\107\124\123\040\122\157\157
23645
+\164\040\122\063\060\036\027\015\061\066\060\066\062\062\060\060
23646
+\060\060\060\060\132\027\015\063\066\060\066\062\062\060\060\060
23647
+\060\060\060\132\060\107\061\013\060\011\006\003\125\004\006\023
23648
+\002\125\123\061\042\060\040\006\003\125\004\012\023\031\107\157
23649
+\157\147\154\145\040\124\162\165\163\164\040\123\145\162\166\151
23650
+\143\145\163\040\114\114\103\061\024\060\022\006\003\125\004\003
23651
+\023\013\107\124\123\040\122\157\157\164\040\122\063\060\166\060
23652
+\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000
23653
+\042\003\142\000\004\037\117\063\207\063\051\212\241\204\336\313
23654
+\307\041\130\101\211\352\126\235\053\113\205\306\035\114\047\274
23655
+\177\046\121\162\157\342\237\326\243\312\314\105\024\106\213\255
23656
+\357\176\206\214\354\261\176\057\377\251\161\235\030\204\105\004
23657
+\101\125\156\053\352\046\177\273\220\001\343\113\031\272\344\124
23658
+\226\105\011\261\325\154\221\104\255\204\023\216\232\214\015\200
23659
+\014\062\366\340\047\243\102\060\100\060\016\006\003\125\035\017
23660
+\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023
23661
+\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035
23662
+\016\004\026\004\024\301\361\046\272\240\055\256\205\201\317\323
23663
+\361\052\022\275\270\012\147\375\274\060\012\006\010\052\206\110
23664
+\316\075\004\003\003\003\151\000\060\146\002\061\000\200\133\244
23665
+\174\043\300\225\245\054\334\276\211\157\043\271\243\335\145\000
23666
+\122\136\221\254\310\235\162\164\202\123\013\175\251\100\275\150
23667
+\140\305\341\270\124\073\301\066\027\045\330\301\275\002\061\000
23668
+\236\065\222\164\205\045\121\365\044\354\144\122\044\120\245\037
23669
+\333\350\313\311\166\354\354\202\156\365\205\030\123\350\270\343
23670
+\232\051\252\226\323\203\043\311\244\173\141\263\314\002\350\135
23671
+END
23672
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23673
+
23674
+# Trust for "GTS Root R3"
23675
+# Issuer: CN=GTS Root R3,O=Google Trust Services LLC,C=US
23676
+# Serial Number:6e:47:a9:c7:6c:a9:73:24:40:89:0f:03:55:dd:8d:1d
23677
+# Subject: CN=GTS Root R3,O=Google Trust Services LLC,C=US
23678
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23679
+# Not Valid After : Sun Jun 22 00:00:00 2036
23680
+# Fingerprint (SHA-256): 15:D5:B8:77:46:19:EA:7D:54:CE:1C:A6:D0:B0:C4:03:E0:37:A9:17:F1:31:E8:A0:4E:1E:6B:7A:71:BA:BC:E5
23681
+# Fingerprint (SHA1): 30:D4:24:6F:07:FF:DB:91:89:8A:0B:E9:49:66:11:EB:8C:5E:46:E5
23682
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23683
+CKA_TOKEN CK_BBOOL CK_TRUE
23684
+CKA_PRIVATE CK_BBOOL CK_FALSE
23685
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23686
+CKA_LABEL UTF8 "GTS Root R3"
23687
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23688
+\060\324\044\157\007\377\333\221\211\212\013\351\111\146\021\353
23689
+\214\136\106\345
23690
+END
23691
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23692
+\032\171\133\153\004\122\234\135\307\164\063\033\045\232\371\045
23693
+END
23694
+CKA_ISSUER MULTILINE_OCTAL
23695
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23696
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23697
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23698
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23699
+\123\040\122\157\157\164\040\122\063
23700
+END
23701
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23702
+\002\020\156\107\251\307\154\251\163\044\100\211\017\003\125\335
23703
+\215\035
23704
+END
23705
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23706
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23707
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23708
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23709
+
23710
+#
23711
+# Certificate "GTS Root R4"
23712
+#
23713
+# Issuer: CN=GTS Root R4,O=Google Trust Services LLC,C=US
23714
+# Serial Number:6e:47:a9:c8:8b:94:b6:e8:bb:3b:2a:d8:a2:b2:c1:99
23715
+# Subject: CN=GTS Root R4,O=Google Trust Services LLC,C=US
23716
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23717
+# Not Valid After : Sun Jun 22 00:00:00 2036
23718
+# Fingerprint (SHA-256): 71:CC:A5:39:1F:9E:79:4B:04:80:25:30:B3:63:E1:21:DA:8A:30:43:BB:26:66:2F:EA:4D:CA:7F:C9:51:A4:BD
23719
+# Fingerprint (SHA1): 2A:1D:60:27:D9:4A:B1:0A:1C:4D:91:5C:CD:33:A0:CB:3E:2D:54:CB
23720
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23721
+CKA_TOKEN CK_BBOOL CK_TRUE
23722
+CKA_PRIVATE CK_BBOOL CK_FALSE
23723
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23724
+CKA_LABEL UTF8 "GTS Root R4"
23725
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23726
+CKA_SUBJECT MULTILINE_OCTAL
23727
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23728
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23729
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23730
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23731
+\123\040\122\157\157\164\040\122\064
23732
+END
23733
+CKA_ID UTF8 "0"
23734
+CKA_ISSUER MULTILINE_OCTAL
23735
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23736
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23737
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23738
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23739
+\123\040\122\157\157\164\040\122\064
23740
+END
23741
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23742
+\002\020\156\107\251\310\213\224\266\350\273\073\052\330\242\262
23743
+\301\231
23744
+END
23745
+CKA_VALUE MULTILINE_OCTAL
23746
+\060\202\002\012\060\202\001\221\240\003\002\001\002\002\020\156
23747
+\107\251\310\213\224\266\350\273\073\052\330\242\262\301\231\060
23748
+\012\006\010\052\206\110\316\075\004\003\003\060\107\061\013\060
23749
+\011\006\003\125\004\006\023\002\125\123\061\042\060\040\006\003
23750
+\125\004\012\023\031\107\157\157\147\154\145\040\124\162\165\163
23751
+\164\040\123\145\162\166\151\143\145\163\040\114\114\103\061\024
23752
+\060\022\006\003\125\004\003\023\013\107\124\123\040\122\157\157
23753
+\164\040\122\064\060\036\027\015\061\066\060\066\062\062\060\060
23754
+\060\060\060\060\132\027\015\063\066\060\066\062\062\060\060\060
23755
+\060\060\060\132\060\107\061\013\060\011\006\003\125\004\006\023
23756
+\002\125\123\061\042\060\040\006\003\125\004\012\023\031\107\157
23757
+\157\147\154\145\040\124\162\165\163\164\040\123\145\162\166\151
23758
+\143\145\163\040\114\114\103\061\024\060\022\006\003\125\004\003
23759
+\023\013\107\124\123\040\122\157\157\164\040\122\064\060\166\060
23760
+\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000
23761
+\042\003\142\000\004\363\164\163\247\150\213\140\256\103\270\065
23762
+\305\201\060\173\113\111\235\373\301\141\316\346\336\106\275\153
23763
+\325\141\030\065\256\100\335\163\367\211\221\060\132\353\074\356
23764
+\205\174\242\100\166\073\251\306\270\107\330\052\347\222\221\152
23765
+\163\351\261\162\071\237\051\237\242\230\323\137\136\130\206\145
23766
+\017\241\204\145\006\321\334\213\311\307\163\310\214\152\057\345
23767
+\304\253\321\035\212\243\102\060\100\060\016\006\003\125\035\017
23768
+\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023
23769
+\001\001\377\004\005\060\003\001\001\377\060\035\006\003\125\035
23770
+\016\004\026\004\024\200\114\326\353\164\377\111\066\243\325\330
23771
+\374\265\076\305\152\360\224\035\214\060\012\006\010\052\206\110
23772
+\316\075\004\003\003\003\147\000\060\144\002\060\152\120\122\164
23773
+\010\304\160\334\236\120\164\041\350\215\172\041\303\117\226\156
23774
+\025\321\042\065\141\055\372\010\067\356\031\155\255\333\262\314
23775
+\175\007\064\365\140\031\054\265\064\331\157\040\002\060\003\161
23776
+\261\272\243\140\013\206\355\232\010\152\225\150\237\342\263\341
23777
+\223\144\174\136\223\246\337\171\055\215\205\343\224\317\043\135
23778
+\161\314\362\260\115\326\376\231\310\224\251\165\242\343
23779
+END
23780
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23781
+
23782
+# Trust for "GTS Root R4"
23783
+# Issuer: CN=GTS Root R4,O=Google Trust Services LLC,C=US
23784
+# Serial Number:6e:47:a9:c8:8b:94:b6:e8:bb:3b:2a:d8:a2:b2:c1:99
23785
+# Subject: CN=GTS Root R4,O=Google Trust Services LLC,C=US
23786
+# Not Valid Before: Wed Jun 22 00:00:00 2016
23787
+# Not Valid After : Sun Jun 22 00:00:00 2036
23788
+# Fingerprint (SHA-256): 71:CC:A5:39:1F:9E:79:4B:04:80:25:30:B3:63:E1:21:DA:8A:30:43:BB:26:66:2F:EA:4D:CA:7F:C9:51:A4:BD
23789
+# Fingerprint (SHA1): 2A:1D:60:27:D9:4A:B1:0A:1C:4D:91:5C:CD:33:A0:CB:3E:2D:54:CB
23790
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23791
+CKA_TOKEN CK_BBOOL CK_TRUE
23792
+CKA_PRIVATE CK_BBOOL CK_FALSE
23793
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23794
+CKA_LABEL UTF8 "GTS Root R4"
23795
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23796
+\052\035\140\047\331\112\261\012\034\115\221\134\315\063\240\313
23797
+\076\055\124\313
23798
+END
23799
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23800
+\135\266\152\304\140\027\044\152\032\231\250\113\356\136\264\046
23801
+END
23802
+CKA_ISSUER MULTILINE_OCTAL
23803
+\060\107\061\013\060\011\006\003\125\004\006\023\002\125\123\061
23804
+\042\060\040\006\003\125\004\012\023\031\107\157\157\147\154\145
23805
+\040\124\162\165\163\164\040\123\145\162\166\151\143\145\163\040
23806
+\114\114\103\061\024\060\022\006\003\125\004\003\023\013\107\124
23807
+\123\040\122\157\157\164\040\122\064
23808
+END
23809
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23810
+\002\020\156\107\251\310\213\224\266\350\273\073\052\330\242\262
23811
+\301\231
23812
+END
23813
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23814
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23815
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23816
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23817
+
23818
+#
23819
+# Certificate "UCA Global G2 Root"
23820
+#
23821
+# Issuer: CN=UCA Global G2 Root,O=UniTrust,C=CN
23822
+# Serial Number:5d:df:b1:da:5a:a3:ed:5d:be:5a:65:20:65:03:90:ef
23823
+# Subject: CN=UCA Global G2 Root,O=UniTrust,C=CN
23824
+# Not Valid Before: Fri Mar 11 00:00:00 2016
23825
+# Not Valid After : Mon Dec 31 00:00:00 2040
23826
+# Fingerprint (SHA-256): 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C
23827
+# Fingerprint (SHA1): 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A
23828
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23829
+CKA_TOKEN CK_BBOOL CK_TRUE
23830
+CKA_PRIVATE CK_BBOOL CK_FALSE
23831
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23832
+CKA_LABEL UTF8 "UCA Global G2 Root"
23833
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23834
+CKA_SUBJECT MULTILINE_OCTAL
23835
+\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061
23836
+\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165
23837
+\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101
23838
+\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164
23839
+END
23840
+CKA_ID UTF8 "0"
23841
+CKA_ISSUER MULTILINE_OCTAL
23842
+\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061
23843
+\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165
23844
+\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101
23845
+\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164
23846
+END
23847
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23848
+\002\020\135\337\261\332\132\243\355\135\276\132\145\040\145\003
23849
+\220\357
23850
+END
23851
+CKA_VALUE MULTILINE_OCTAL
23852
+\060\202\005\106\060\202\003\056\240\003\002\001\002\002\020\135
23853
+\337\261\332\132\243\355\135\276\132\145\040\145\003\220\357\060
23854
+\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\075
23855
+\061\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060
23856
+\017\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164
23857
+\061\033\060\031\006\003\125\004\003\014\022\125\103\101\040\107
23858
+\154\157\142\141\154\040\107\062\040\122\157\157\164\060\036\027
23859
+\015\061\066\060\063\061\061\060\060\060\060\060\060\132\027\015
23860
+\064\060\061\062\063\061\060\060\060\060\060\060\132\060\075\061
23861
+\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060\017
23862
+\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164\061
23863
+\033\060\031\006\003\125\004\003\014\022\125\103\101\040\107\154
23864
+\157\142\141\154\040\107\062\040\122\157\157\164\060\202\002\042
23865
+\060\015\006\011\052\206\110\206\367\015\001\001\001\005\000\003
23866
+\202\002\017\000\060\202\002\012\002\202\002\001\000\305\346\053
23867
+\157\174\357\046\005\047\243\201\044\332\157\313\001\371\231\232
23868
+\251\062\302\042\207\141\101\221\073\313\303\150\033\006\305\114
23869
+\251\053\301\147\027\042\035\053\355\371\051\211\223\242\170\275
23870
+\222\153\240\243\015\242\176\312\223\263\246\321\214\065\325\165
23871
+\371\027\366\317\105\305\345\172\354\167\223\240\217\043\256\016
23872
+\032\003\177\276\324\320\355\056\173\253\106\043\133\377\054\346
23873
+\124\172\224\300\052\025\360\311\215\260\172\073\044\341\327\150
23874
+\342\061\074\006\063\106\266\124\021\246\245\057\042\124\052\130
23875
+\015\001\002\361\372\025\121\147\154\300\372\327\266\033\177\321
23876
+\126\210\057\032\072\215\073\273\202\021\340\107\000\320\122\207
23877
+\253\373\206\176\017\044\153\100\235\064\147\274\215\307\055\206
23878
+\157\171\076\216\251\074\027\113\177\260\231\343\260\161\140\334
23879
+\013\365\144\303\316\103\274\155\161\271\322\336\047\133\212\350
23880
+\330\306\256\341\131\175\317\050\055\065\270\225\126\032\361\262
23881
+\130\113\267\022\067\310\174\263\355\113\200\341\215\372\062\043
23882
+\266\157\267\110\225\010\261\104\116\205\214\072\002\124\040\057
23883
+\337\277\127\117\073\072\220\041\327\301\046\065\124\040\354\307
23884
+\077\107\354\357\132\277\113\172\301\255\073\027\120\134\142\330
23885
+\017\113\112\334\053\372\156\274\163\222\315\354\307\120\350\101
23886
+\226\327\251\176\155\330\351\035\217\212\265\271\130\222\272\112
23887
+\222\053\014\126\375\200\353\010\360\136\051\156\033\034\014\257
23888
+\217\223\211\255\333\275\243\236\041\312\211\031\354\337\265\303
23889
+\032\353\026\376\170\066\114\326\156\320\076\027\034\220\027\153
23890
+\046\272\373\172\057\277\021\034\030\016\055\163\003\217\240\345
23891
+\065\240\132\342\114\165\035\161\341\071\070\123\170\100\314\203
23892
+\223\327\012\236\235\133\217\212\344\345\340\110\344\110\262\107
23893
+\315\116\052\165\052\173\362\042\366\311\276\011\221\226\127\172
23894
+\210\210\254\356\160\254\371\334\051\343\014\034\073\022\116\104
23895
+\326\247\116\260\046\310\363\331\032\227\221\150\352\357\215\106
23896
+\006\322\126\105\130\232\074\014\017\203\270\005\045\303\071\317
23897
+\073\244\064\211\267\171\022\057\107\305\347\251\227\151\374\246
23898
+\167\147\265\337\173\361\172\145\025\344\141\126\145\002\003\001
23899
+\000\001\243\102\060\100\060\016\006\003\125\035\017\001\001\377
23900
+\004\004\003\002\001\006\060\017\006\003\125\035\023\001\001\377
23901
+\004\005\060\003\001\001\377\060\035\006\003\125\035\016\004\026
23902
+\004\024\201\304\214\314\365\344\060\377\245\014\010\137\214\025
23903
+\147\041\164\001\337\337\060\015\006\011\052\206\110\206\367\015
23904
+\001\001\013\005\000\003\202\002\001\000\023\145\042\365\216\053
23905
+\255\104\344\313\377\271\150\346\303\200\110\075\004\173\372\043
23906
+\057\172\355\066\332\262\316\155\366\346\236\345\137\130\217\313
23907
+\067\062\241\310\145\266\256\070\075\065\033\076\274\073\266\004
23908
+\320\274\371\111\365\233\367\205\305\066\266\313\274\370\310\071
23909
+\325\344\137\007\275\025\124\227\164\312\312\355\117\272\272\144
23910
+\166\237\201\270\204\105\111\114\215\157\242\353\261\314\321\303
23911
+\224\332\104\302\346\342\352\030\350\242\037\047\005\272\327\345
23912
+\326\251\315\335\357\166\230\215\000\016\315\033\372\003\267\216
23913
+\200\130\016\047\077\122\373\224\242\312\136\145\311\326\204\332
23914
+\271\065\161\363\046\300\117\167\346\201\047\322\167\073\232\024
23915
+\157\171\364\366\320\341\323\224\272\320\127\121\275\047\005\015
23916
+\301\375\310\022\060\356\157\215\021\053\010\235\324\324\277\200
23917
+\105\024\232\210\104\332\060\352\264\247\343\356\357\133\202\325
23918
+\076\326\255\170\222\333\134\074\363\330\255\372\270\153\177\304
23919
+\066\050\266\002\025\212\124\054\234\260\027\163\216\320\067\243
23920
+\024\074\230\225\000\014\051\005\133\236\111\111\261\137\307\343
23921
+\313\317\047\145\216\065\027\267\127\310\060\331\101\133\271\024
23922
+\266\350\302\017\224\061\247\224\230\314\152\353\265\341\047\365
23923
+\020\250\001\350\216\022\142\350\210\314\265\177\106\227\300\233
23924
+\020\146\070\032\066\106\137\042\150\075\337\311\306\023\047\253
23925
+\123\006\254\242\074\206\006\145\157\261\176\261\051\104\232\243
23926
+\272\111\151\050\151\217\327\345\137\255\004\206\144\157\032\240
23927
+\014\305\010\142\316\200\243\320\363\354\150\336\276\063\307\027
23928
+\133\177\200\304\114\114\261\246\204\212\303\073\270\011\315\024
23929
+\201\272\030\343\124\127\066\376\333\057\174\107\241\072\063\310
23930
+\371\130\073\104\117\261\312\002\211\004\226\050\150\305\113\270
23931
+\046\211\273\326\063\057\120\325\376\232\211\272\030\062\222\124
23932
+\306\133\340\235\371\136\345\015\042\233\366\332\342\310\041\262
23933
+\142\041\252\206\100\262\056\144\323\137\310\343\176\021\147\105
23934
+\037\005\376\343\242\357\263\250\263\363\175\217\370\014\037\042
23935
+\037\055\160\264\270\001\064\166\060\000\345\043\170\247\126\327
23936
+\120\037\212\373\006\365\302\031\360\320
23937
+END
23938
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
23939
+
23940
+# Trust for "UCA Global G2 Root"
23941
+# Issuer: CN=UCA Global G2 Root,O=UniTrust,C=CN
23942
+# Serial Number:5d:df:b1:da:5a:a3:ed:5d:be:5a:65:20:65:03:90:ef
23943
+# Subject: CN=UCA Global G2 Root,O=UniTrust,C=CN
23944
+# Not Valid Before: Fri Mar 11 00:00:00 2016
23945
+# Not Valid After : Mon Dec 31 00:00:00 2040
23946
+# Fingerprint (SHA-256): 9B:EA:11:C9:76:FE:01:47:64:C1:BE:56:A6:F9:14:B5:A5:60:31:7A:BD:99:88:39:33:82:E5:16:1A:A0:49:3C
23947
+# Fingerprint (SHA1): 28:F9:78:16:19:7A:FF:18:25:18:AA:44:FE:C1:A0:CE:5C:B6:4C:8A
23948
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
23949
+CKA_TOKEN CK_BBOOL CK_TRUE
23950
+CKA_PRIVATE CK_BBOOL CK_FALSE
23951
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23952
+CKA_LABEL UTF8 "UCA Global G2 Root"
23953
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
23954
+\050\371\170\026\031\172\377\030\045\030\252\104\376\301\240\316
23955
+\134\266\114\212
23956
+END
23957
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
23958
+\200\376\360\304\112\360\134\142\062\237\034\272\170\251\120\370
23959
+END
23960
+CKA_ISSUER MULTILINE_OCTAL
23961
+\060\075\061\013\060\011\006\003\125\004\006\023\002\103\116\061
23962
+\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165
23963
+\163\164\061\033\060\031\006\003\125\004\003\014\022\125\103\101
23964
+\040\107\154\157\142\141\154\040\107\062\040\122\157\157\164
23965
+END
23966
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
23967
+\002\020\135\337\261\332\132\243\355\135\276\132\145\040\145\003
23968
+\220\357
23969
+END
23970
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23971
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
23972
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
23973
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
23974
+
23975
+#
23976
+# Certificate "UCA Extended Validation Root"
23977
+#
23978
+# Issuer: CN=UCA Extended Validation Root,O=UniTrust,C=CN
23979
+# Serial Number:4f:d2:2b:8f:f5:64:c8:33:9e:4f:34:58:66:23:70:60
23980
+# Subject: CN=UCA Extended Validation Root,O=UniTrust,C=CN
23981
+# Not Valid Before: Fri Mar 13 00:00:00 2015
23982
+# Not Valid After : Fri Dec 31 00:00:00 2038
23983
+# Fingerprint (SHA-256): D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24
23984
+# Fingerprint (SHA1): A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A
23985
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
23986
+CKA_TOKEN CK_BBOOL CK_TRUE
23987
+CKA_PRIVATE CK_BBOOL CK_FALSE
23988
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
23989
+CKA_LABEL UTF8 "UCA Extended Validation Root"
23990
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
23991
+CKA_SUBJECT MULTILINE_OCTAL
23992
+\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061
23993
+\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165
23994
+\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101
23995
+\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141
23996
+\164\151\157\156\040\122\157\157\164
23997
+END
23998
+CKA_ID UTF8 "0"
23999
+CKA_ISSUER MULTILINE_OCTAL
24000
+\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061
24001
+\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165
24002
+\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101
24003
+\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141
24004
+\164\151\157\156\040\122\157\157\164
24005
+END
24006
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24007
+\002\020\117\322\053\217\365\144\310\063\236\117\064\130\146\043
24008
+\160\140
24009
+END
24010
+CKA_VALUE MULTILINE_OCTAL
24011
+\060\202\005\132\060\202\003\102\240\003\002\001\002\002\020\117
24012
+\322\053\217\365\144\310\063\236\117\064\130\146\043\160\140\060
24013
+\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060\107
24014
+\061\013\060\011\006\003\125\004\006\023\002\103\116\061\021\060
24015
+\017\006\003\125\004\012\014\010\125\156\151\124\162\165\163\164
24016
+\061\045\060\043\006\003\125\004\003\014\034\125\103\101\040\105
24017
+\170\164\145\156\144\145\144\040\126\141\154\151\144\141\164\151
24018
+\157\156\040\122\157\157\164\060\036\027\015\061\065\060\063\061
24019
+\063\060\060\060\060\060\060\132\027\015\063\070\061\062\063\061
24020
+\060\060\060\060\060\060\132\060\107\061\013\060\011\006\003\125
24021
+\004\006\023\002\103\116\061\021\060\017\006\003\125\004\012\014
24022
+\010\125\156\151\124\162\165\163\164\061\045\060\043\006\003\125
24023
+\004\003\014\034\125\103\101\040\105\170\164\145\156\144\145\144
24024
+\040\126\141\154\151\144\141\164\151\157\156\040\122\157\157\164
24025
+\060\202\002\042\060\015\006\011\052\206\110\206\367\015\001\001
24026
+\001\005\000\003\202\002\017\000\060\202\002\012\002\202\002\001
24027
+\000\251\011\007\050\023\002\260\231\340\144\252\036\103\026\172
24028
+\163\261\221\240\165\076\250\372\343\070\000\172\354\211\152\040
24029
+\017\213\305\260\233\063\003\132\206\306\130\206\325\301\205\273
24030
+\117\306\234\100\115\312\276\356\151\226\270\255\201\060\232\174
24031
+\222\005\353\005\053\232\110\320\270\166\076\226\310\040\273\322
24032
+\260\361\217\330\254\105\106\377\252\147\140\264\167\176\152\037
24033
+\074\032\122\172\004\075\007\074\205\015\204\320\037\166\012\367
24034
+\152\024\337\162\343\064\174\127\116\126\001\076\171\361\252\051
24035
+\073\154\372\370\217\155\115\310\065\337\256\353\334\044\356\171
24036
+\105\247\205\266\005\210\336\210\135\045\174\227\144\147\011\331
24037
+\277\132\025\005\206\363\011\036\354\130\062\063\021\363\167\144
24038
+\260\166\037\344\020\065\027\033\362\016\261\154\244\052\243\163
24039
+\374\011\037\036\062\031\123\021\347\331\263\054\056\166\056\241
24040
+\243\336\176\152\210\011\350\362\007\212\370\262\315\020\347\342
24041
+\163\100\223\273\010\321\077\341\374\013\224\263\045\357\174\246
24042
+\327\321\257\237\377\226\232\365\221\173\230\013\167\324\176\350
24043
+\007\322\142\265\225\071\343\363\361\155\017\016\145\204\212\143
24044
+\124\305\200\266\340\236\113\175\107\046\247\001\010\135\321\210
24045
+\236\327\303\062\104\372\202\112\012\150\124\177\070\123\003\314
24046
+\244\000\063\144\121\131\013\243\202\221\172\136\354\026\302\363
24047
+\052\346\142\332\052\333\131\142\020\045\112\052\201\013\107\007
24048
+\103\006\160\207\322\372\223\021\051\172\110\115\353\224\307\160
24049
+\115\257\147\325\121\261\200\040\001\001\264\172\010\246\220\177
24050
+\116\340\357\007\101\207\257\152\245\136\213\373\317\120\262\232
24051
+\124\257\303\211\272\130\055\365\060\230\261\066\162\071\176\111
24052
+\004\375\051\247\114\171\344\005\127\333\224\271\026\123\215\106
24053
+\263\035\225\141\127\126\177\257\360\026\133\141\130\157\066\120
24054
+\021\013\330\254\053\225\026\032\016\037\010\315\066\064\145\020
24055
+\142\146\325\200\137\024\040\137\055\014\240\170\012\150\326\054
24056
+\327\351\157\053\322\112\005\223\374\236\157\153\147\377\210\361
24057
+\116\245\151\112\122\067\005\352\306\026\215\322\304\231\321\202
24058
+\053\073\272\065\165\367\121\121\130\363\310\007\335\344\264\003
24059
+\177\002\003\001\000\001\243\102\060\100\060\035\006\003\125\035
24060
+\016\004\026\004\024\331\164\072\344\060\075\015\367\022\334\176
24061
+\132\005\237\036\064\232\367\341\024\060\017\006\003\125\035\023
24062
+\001\001\377\004\005\060\003\001\001\377\060\016\006\003\125\035
24063
+\017\001\001\377\004\004\003\002\001\206\060\015\006\011\052\206
24064
+\110\206\367\015\001\001\013\005\000\003\202\002\001\000\066\215
24065
+\227\314\102\025\144\051\067\233\046\054\326\373\256\025\151\054
24066
+\153\032\032\367\137\266\371\007\114\131\352\363\311\310\271\256
24067
+\314\272\056\172\334\300\365\260\055\300\073\257\237\160\005\021
24068
+\152\237\045\117\001\051\160\343\345\014\341\352\132\174\334\111
24069
+\273\301\036\052\201\365\026\113\162\221\310\242\061\271\252\332
24070
+\374\235\037\363\135\100\002\023\374\116\034\006\312\263\024\220
24071
+\124\027\031\022\032\361\037\327\014\151\132\366\161\170\364\224
24072
+\175\221\013\216\354\220\124\216\274\157\241\114\253\374\164\144
24073
+\375\161\232\370\101\007\241\315\221\344\074\232\340\233\062\071
24074
+\163\253\052\325\151\310\170\221\046\061\175\342\307\060\361\374
24075
+\024\170\167\022\016\023\364\335\026\224\277\113\147\173\160\123
24076
+\205\312\260\273\363\070\115\054\220\071\300\015\302\135\153\351
24077
+\342\345\325\210\215\326\054\277\253\033\276\265\050\207\022\027
24078
+\164\156\374\175\374\217\320\207\046\260\033\373\271\154\253\342
24079
+\236\075\025\301\073\056\147\002\130\221\237\357\370\102\037\054
24080
+\267\150\365\165\255\317\265\366\377\021\175\302\360\044\245\255
24081
+\323\372\240\074\251\372\135\334\245\240\357\104\244\276\326\350
24082
+\345\344\023\226\027\173\006\076\062\355\307\267\102\274\166\243
24083
+\330\145\070\053\070\065\121\041\016\016\157\056\064\023\100\341
24084
+\053\147\014\155\112\101\060\030\043\132\062\125\231\311\027\340
24085
+\074\336\366\354\171\255\053\130\031\242\255\054\042\032\225\216
24086
+\276\226\220\135\102\127\304\371\024\003\065\053\034\055\121\127
24087
+\010\247\072\336\077\344\310\264\003\163\302\301\046\200\273\013
24088
+\102\037\255\015\257\046\162\332\314\276\263\243\203\130\015\202
24089
+\305\037\106\121\343\234\030\314\215\233\215\354\111\353\165\120
24090
+\325\214\050\131\312\164\064\332\214\013\041\253\036\352\033\345
24091
+\307\375\025\076\300\027\252\373\043\156\046\106\313\372\371\261
24092
+\162\153\151\317\042\204\013\142\017\254\331\031\000\224\242\166
24093
+\074\324\055\232\355\004\236\055\006\142\020\067\122\034\205\162
24094
+\033\047\345\314\306\061\354\067\354\143\131\233\013\035\166\314
24095
+\176\062\232\210\225\010\066\122\273\336\166\137\166\111\111\255
24096
+\177\275\145\040\262\311\301\053\166\030\166\237\126\261
24097
+END
24098
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24099
+
24100
+# Trust for "UCA Extended Validation Root"
24101
+# Issuer: CN=UCA Extended Validation Root,O=UniTrust,C=CN
24102
+# Serial Number:4f:d2:2b:8f:f5:64:c8:33:9e:4f:34:58:66:23:70:60
24103
+# Subject: CN=UCA Extended Validation Root,O=UniTrust,C=CN
24104
+# Not Valid Before: Fri Mar 13 00:00:00 2015
24105
+# Not Valid After : Fri Dec 31 00:00:00 2038
24106
+# Fingerprint (SHA-256): D4:3A:F9:B3:54:73:75:5C:96:84:FC:06:D7:D8:CB:70:EE:5C:28:E7:73:FB:29:4E:B4:1E:E7:17:22:92:4D:24
24107
+# Fingerprint (SHA1): A3:A1:B0:6F:24:61:23:4A:E3:36:A5:C2:37:FC:A6:FF:DD:F0:D7:3A
24108
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24109
+CKA_TOKEN CK_BBOOL CK_TRUE
24110
+CKA_PRIVATE CK_BBOOL CK_FALSE
24111
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24112
+CKA_LABEL UTF8 "UCA Extended Validation Root"
24113
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24114
+\243\241\260\157\044\141\043\112\343\066\245\302\067\374\246\377
24115
+\335\360\327\072
24116
+END
24117
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24118
+\241\363\137\103\306\064\233\332\277\214\176\005\123\255\226\342
24119
+END
24120
+CKA_ISSUER MULTILINE_OCTAL
24121
+\060\107\061\013\060\011\006\003\125\004\006\023\002\103\116\061
24122
+\021\060\017\006\003\125\004\012\014\010\125\156\151\124\162\165
24123
+\163\164\061\045\060\043\006\003\125\004\003\014\034\125\103\101
24124
+\040\105\170\164\145\156\144\145\144\040\126\141\154\151\144\141
24125
+\164\151\157\156\040\122\157\157\164
24126
+END
24127
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24128
+\002\020\117\322\053\217\365\144\310\063\236\117\064\130\146\043
24129
+\160\140
24130
+END
24131
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24132
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24133
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24134
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
24135
+
24136
+#
24137
+# Certificate "Certigna Root CA"
24138
+#
24139
+# Issuer: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR
24140
+# Serial Number:00:ca:e9:1b:89:f1:55:03:0d:a3:e6:41:6d:c4:e3:a6:e1
24141
+# Subject: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR
24142
+# Not Valid Before: Tue Oct 01 08:32:27 2013
24143
+# Not Valid After : Sat Oct 01 08:32:27 2033
24144
+# Fingerprint (SHA-256): D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68
24145
+# Fingerprint (SHA1): 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43
24146
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
24147
+CKA_TOKEN CK_BBOOL CK_TRUE
24148
+CKA_PRIVATE CK_BBOOL CK_FALSE
24149
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24150
+CKA_LABEL UTF8 "Certigna Root CA"
24151
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
24152
+CKA_SUBJECT MULTILINE_OCTAL
24153
+\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061
24154
+\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157
24155
+\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060
24156
+\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063
24157
+\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164
24158
+\151\147\156\141\040\122\157\157\164\040\103\101
24159
+END
24160
+CKA_ID UTF8 "0"
24161
+CKA_ISSUER MULTILINE_OCTAL
24162
+\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061
24163
+\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157
24164
+\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060
24165
+\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063
24166
+\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164
24167
+\151\147\156\141\040\122\157\157\164\040\103\101
24168
+END
24169
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24170
+\002\021\000\312\351\033\211\361\125\003\015\243\346\101\155\304
24171
+\343\246\341
24172
+END
24173
+CKA_VALUE MULTILINE_OCTAL
24174
+\060\202\006\133\060\202\004\103\240\003\002\001\002\002\021\000
24175
+\312\351\033\211\361\125\003\015\243\346\101\155\304\343\246\341
24176
+\060\015\006\011\052\206\110\206\367\015\001\001\013\005\000\060
24177
+\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061\022
24178
+\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157\164
24179
+\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060\060
24180
+\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063\066
24181
+\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164\151
24182
+\147\156\141\040\122\157\157\164\040\103\101\060\036\027\015\061
24183
+\063\061\060\060\061\060\070\063\062\062\067\132\027\015\063\063
24184
+\061\060\060\061\060\070\063\062\062\067\132\060\132\061\013\060
24185
+\011\006\003\125\004\006\023\002\106\122\061\022\060\020\006\003
24186
+\125\004\012\014\011\104\150\151\155\171\157\164\151\163\061\034
24187
+\060\032\006\003\125\004\013\014\023\060\060\060\062\040\064\070
24188
+\061\064\066\063\060\070\061\060\060\060\063\066\061\031\060\027
24189
+\006\003\125\004\003\014\020\103\145\162\164\151\147\156\141\040
24190
+\122\157\157\164\040\103\101\060\202\002\042\060\015\006\011\052
24191
+\206\110\206\367\015\001\001\001\005\000\003\202\002\017\000\060
24192
+\202\002\012\002\202\002\001\000\315\030\071\145\032\131\261\352
24193
+\144\026\016\214\224\044\225\174\203\323\305\071\046\334\014\357
24194
+\026\127\215\327\330\254\243\102\177\202\312\355\315\133\333\016
24195
+\267\055\355\105\010\027\262\331\263\313\326\027\122\162\050\333
24196
+\216\116\236\212\266\013\371\236\204\232\115\166\336\042\051\134
24197
+\322\263\322\006\076\060\071\251\164\243\222\126\034\241\157\114
24198
+\012\040\155\237\043\172\264\306\332\054\344\035\054\334\263\050
24199
+\320\023\362\114\116\002\111\241\124\100\236\346\345\005\240\055
24200
+\204\310\377\230\154\320\353\212\032\204\010\036\267\150\043\356
24201
+\043\325\160\316\155\121\151\020\356\241\172\302\321\042\061\302
24202
+\202\205\322\362\125\166\120\174\045\172\311\204\134\013\254\335
24203
+\102\116\053\347\202\242\044\211\313\220\262\320\356\043\272\146
24204
+\114\273\142\244\371\123\132\144\173\174\230\372\243\110\236\017
24205
+\225\256\247\030\364\152\354\056\003\105\257\360\164\370\052\315
24206
+\172\135\321\276\104\046\062\051\361\361\365\154\314\176\002\041
24207
+\013\237\157\244\077\276\235\123\342\317\175\251\054\174\130\032
24208
+\227\341\075\067\067\030\146\050\322\100\305\121\212\214\303\055
24209
+\316\123\210\044\130\144\060\026\305\252\340\326\012\246\100\337
24210
+\170\366\365\004\174\151\023\204\274\321\321\247\006\317\001\367
24211
+\150\300\250\127\273\072\141\255\004\214\223\343\255\374\360\333
24212
+\104\155\131\334\111\131\256\254\232\231\066\060\101\173\166\063
24213
+\042\207\243\302\222\206\156\371\160\356\256\207\207\225\033\304
24214
+\172\275\061\363\324\322\345\231\377\276\110\354\165\365\170\026
24215
+\035\246\160\301\177\074\033\241\222\373\317\310\074\326\305\223
24216
+\012\217\365\125\072\166\225\316\131\230\212\011\225\167\062\232
24217
+\203\272\054\004\072\227\275\324\057\276\327\154\233\242\312\175
24218
+\155\046\311\125\325\317\303\171\122\010\011\231\007\044\055\144
24219
+\045\153\246\041\151\233\152\335\164\115\153\227\172\101\275\253
24220
+\027\371\220\027\110\217\066\371\055\325\305\333\356\252\205\105
24221
+\101\372\315\072\105\261\150\346\066\114\233\220\127\354\043\271
24222
+\207\010\302\304\011\361\227\206\052\050\115\342\164\300\332\304
24223
+\214\333\337\342\241\027\131\316\044\131\164\061\332\177\375\060
24224
+\155\331\334\341\152\341\374\137\002\003\001\000\001\243\202\001
24225
+\032\060\202\001\026\060\017\006\003\125\035\023\001\001\377\004
24226
+\005\060\003\001\001\377\060\016\006\003\125\035\017\001\001\377
24227
+\004\004\003\002\001\006\060\035\006\003\125\035\016\004\026\004
24228
+\024\030\207\126\340\156\167\356\044\065\074\116\163\232\037\326
24229
+\341\342\171\176\053\060\037\006\003\125\035\043\004\030\060\026
24230
+\200\024\030\207\126\340\156\167\356\044\065\074\116\163\232\037
24231
+\326\341\342\171\176\053\060\104\006\003\125\035\040\004\075\060
24232
+\073\060\071\006\004\125\035\040\000\060\061\060\057\006\010\053
24233
+\006\001\005\005\007\002\001\026\043\150\164\164\160\163\072\057
24234
+\057\167\167\167\167\056\143\145\162\164\151\147\156\141\056\146
24235
+\162\057\141\165\164\157\162\151\164\145\163\057\060\155\006\003
24236
+\125\035\037\004\146\060\144\060\057\240\055\240\053\206\051\150
24237
+\164\164\160\072\057\057\143\162\154\056\143\145\162\164\151\147
24238
+\156\141\056\146\162\057\143\145\162\164\151\147\156\141\162\157
24239
+\157\164\143\141\056\143\162\154\060\061\240\057\240\055\206\053
24240
+\150\164\164\160\072\057\057\143\162\154\056\144\150\151\155\171
24241
+\157\164\151\163\056\143\157\155\057\143\145\162\164\151\147\156
24242
+\141\162\157\157\164\143\141\056\143\162\154\060\015\006\011\052
24243
+\206\110\206\367\015\001\001\013\005\000\003\202\002\001\000\224
24244
+\270\236\117\360\343\225\010\042\347\315\150\101\367\034\125\325
24245
+\174\000\342\055\072\211\135\150\070\057\121\042\013\112\215\313
24246
+\351\273\135\076\273\134\075\261\050\376\344\123\125\023\317\241
24247
+\220\033\002\035\137\146\106\011\063\050\341\015\044\227\160\323
24248
+\020\037\352\144\127\226\273\135\332\347\304\214\117\114\144\106
24249
+\035\134\207\343\131\336\102\321\233\250\176\246\211\335\217\034
24250
+\311\060\202\355\073\234\315\300\351\031\340\152\330\002\165\067
24251
+\253\367\064\050\050\221\362\004\012\117\065\343\140\046\001\372
24252
+\320\021\214\371\021\152\356\257\075\303\120\323\217\137\063\171
24253
+\074\206\250\163\105\220\214\040\266\162\163\027\043\276\007\145
24254
+\345\170\222\015\272\001\300\353\214\034\146\277\254\206\167\001
24255
+\224\015\234\346\351\071\215\037\246\121\214\231\014\071\167\341
24256
+\264\233\372\034\147\127\157\152\152\216\251\053\114\127\171\172
24257
+\127\042\317\315\137\143\106\215\134\131\072\206\370\062\107\142
24258
+\243\147\015\030\221\334\373\246\153\365\110\141\163\043\131\216
24259
+\002\247\274\104\352\364\111\235\361\124\130\371\140\257\332\030
24260
+\244\057\050\105\334\172\240\210\206\135\363\073\347\377\051\065
24261
+\200\374\144\103\224\346\343\034\157\276\255\016\052\143\231\053
24262
+\311\176\205\366\161\350\006\003\225\376\336\217\110\034\132\324
24263
+\222\350\053\356\347\061\333\272\004\152\207\230\347\305\137\357
24264
+\175\247\042\367\001\330\115\371\211\320\016\232\005\131\244\236
24265
+\230\331\157\053\312\160\276\144\302\125\243\364\351\257\303\222
24266
+\051\334\210\026\044\231\074\215\046\230\266\133\267\314\316\267
24267
+\067\007\375\046\331\230\205\044\377\131\043\003\232\355\235\235
24268
+\250\344\136\070\316\327\122\015\157\322\077\155\261\005\153\111
24269
+\316\212\221\106\163\364\366\057\360\250\163\167\016\145\254\241
24270
+\215\146\122\151\176\113\150\014\307\036\067\047\203\245\214\307
24271
+\002\344\024\315\111\001\260\163\263\375\306\220\072\157\322\154
24272
+\355\073\356\354\221\276\242\103\135\213\000\112\146\045\104\160
24273
+\336\100\017\370\174\025\367\242\316\074\327\136\023\214\201\027
24274
+\030\027\321\275\361\167\020\072\324\145\071\301\047\254\127\054
24275
+\045\124\377\242\332\117\212\141\071\136\256\075\112\214\275
24276
+END
24277
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24278
+
24279
+# Trust for "Certigna Root CA"
24280
+# Issuer: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR
24281
+# Serial Number:00:ca:e9:1b:89:f1:55:03:0d:a3:e6:41:6d:c4:e3:a6:e1
24282
+# Subject: CN=Certigna Root CA,OU=0002 48146308100036,O=Dhimyotis,C=FR
24283
+# Not Valid Before: Tue Oct 01 08:32:27 2013
24284
+# Not Valid After : Sat Oct 01 08:32:27 2033
24285
+# Fingerprint (SHA-256): D4:8D:3D:23:EE:DB:50:A4:59:E5:51:97:60:1C:27:77:4B:9D:7B:18:C9:4D:5A:05:95:11:A1:02:50:B9:31:68
24286
+# Fingerprint (SHA1): 2D:0D:52:14:FF:9E:AD:99:24:01:74:20:47:6E:6C:85:27:27:F5:43
24287
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24288
+CKA_TOKEN CK_BBOOL CK_TRUE
24289
+CKA_PRIVATE CK_BBOOL CK_FALSE
24290
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24291
+CKA_LABEL UTF8 "Certigna Root CA"
24292
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24293
+\055\015\122\024\377\236\255\231\044\001\164\040\107\156\154\205
24294
+\047\047\365\103
24295
+END
24296
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24297
+\016\134\060\142\047\353\133\274\327\256\142\272\351\325\337\167
24298
+END
24299
+CKA_ISSUER MULTILINE_OCTAL
24300
+\060\132\061\013\060\011\006\003\125\004\006\023\002\106\122\061
24301
+\022\060\020\006\003\125\004\012\014\011\104\150\151\155\171\157
24302
+\164\151\163\061\034\060\032\006\003\125\004\013\014\023\060\060
24303
+\060\062\040\064\070\061\064\066\063\060\070\061\060\060\060\063
24304
+\066\061\031\060\027\006\003\125\004\003\014\020\103\145\162\164
24305
+\151\147\156\141\040\122\157\157\164\040\103\101
24306
+END
24307
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24308
+\002\021\000\312\351\033\211\361\125\003\015\243\346\101\155\304
24309
+\343\246\341
24310
+END
24311
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24312
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24313
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24314
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
24315
+
24316
+#
24317
+# Certificate "emSign Root CA - G1"
24318
+#
24319
+# Issuer: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24320
+# Serial Number:31:f5:e4:62:0c:6c:58:ed:d6:d8
24321
+# Subject: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24322
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24323
+# Not Valid After : Wed Feb 18 18:30:00 2043
24324
+# Fingerprint (SHA-256): 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67
24325
+# Fingerprint (SHA1): 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C
24326
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
24327
+CKA_TOKEN CK_BBOOL CK_TRUE
24328
+CKA_PRIVATE CK_BBOOL CK_FALSE
24329
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24330
+CKA_LABEL UTF8 "emSign Root CA - G1"
24331
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
24332
+CKA_SUBJECT MULTILINE_OCTAL
24333
+\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061
24334
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24335
+\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145
24336
+\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147
24337
+\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006
24338
+\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157
24339
+\164\040\103\101\040\055\040\107\061
24340
+END
24341
+CKA_ID UTF8 "0"
24342
+CKA_ISSUER MULTILINE_OCTAL
24343
+\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061
24344
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24345
+\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145
24346
+\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147
24347
+\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006
24348
+\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157
24349
+\164\040\103\101\040\055\040\107\061
24350
+END
24351
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24352
+\002\012\061\365\344\142\014\154\130\355\326\330
24353
+END
24354
+CKA_VALUE MULTILINE_OCTAL
24355
+\060\202\003\224\060\202\002\174\240\003\002\001\002\002\012\061
24356
+\365\344\142\014\154\130\355\326\330\060\015\006\011\052\206\110
24357
+\206\367\015\001\001\013\005\000\060\147\061\013\060\011\006\003
24358
+\125\004\006\023\002\111\116\061\023\060\021\006\003\125\004\013
24359
+\023\012\145\155\123\151\147\156\040\120\113\111\061\045\060\043
24360
+\006\003\125\004\012\023\034\145\115\165\144\150\162\141\040\124
24361
+\145\143\150\156\157\154\157\147\151\145\163\040\114\151\155\151
24362
+\164\145\144\061\034\060\032\006\003\125\004\003\023\023\145\155
24363
+\123\151\147\156\040\122\157\157\164\040\103\101\040\055\040\107
24364
+\061\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060
24365
+\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060
24366
+\132\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116
24367
+\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147
24368
+\156\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034
24369
+\145\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157
24370
+\147\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032
24371
+\006\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157
24372
+\157\164\040\103\101\040\055\040\107\061\060\202\001\042\060\015
24373
+\006\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001
24374
+\017\000\060\202\001\012\002\202\001\001\000\223\113\273\351\146
24375
+\212\356\235\133\325\064\223\320\033\036\303\347\236\270\144\063
24376
+\177\143\170\150\264\315\056\161\165\327\233\040\306\115\051\274
24377
+\266\150\140\212\367\041\232\126\065\132\363\166\275\330\315\232
24378
+\377\223\126\113\245\131\006\241\223\064\051\335\026\064\165\116
24379
+\362\201\264\307\226\116\255\031\025\122\112\376\074\160\165\160
24380
+\315\257\053\253\025\232\063\074\252\263\213\252\315\103\375\365
24381
+\352\160\377\355\317\021\073\224\316\116\062\026\323\043\100\052
24382
+\167\263\257\074\001\054\154\355\231\054\213\331\116\151\230\262
24383
+\367\217\101\260\062\170\141\326\015\137\303\372\242\100\222\035
24384
+\134\027\346\160\076\065\347\242\267\302\142\342\253\244\070\114
24385
+\265\071\065\157\352\003\151\372\072\124\150\205\155\326\362\057
24386
+\103\125\036\221\015\016\330\325\152\244\226\321\023\074\054\170
24387
+\120\350\072\222\322\027\126\345\065\032\100\034\076\215\054\355
24388
+\071\337\102\340\203\101\164\337\243\315\302\206\140\110\150\343
24389
+\151\013\124\000\213\344\166\151\041\015\171\116\064\010\136\024
24390
+\302\314\261\267\255\327\174\160\212\307\205\002\003\001\000\001
24391
+\243\102\060\100\060\035\006\003\125\035\016\004\026\004\024\373
24392
+\357\015\206\236\260\343\335\251\271\361\041\027\177\076\374\360
24393
+\167\053\032\060\016\006\003\125\035\017\001\001\377\004\004\003
24394
+\002\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060
24395
+\003\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001
24396
+\013\005\000\003\202\001\001\000\131\377\362\214\365\207\175\161
24397
+\075\243\237\033\133\321\332\370\323\234\153\066\275\233\251\141
24398
+\353\336\026\054\164\075\236\346\165\332\327\272\247\274\102\027
24399
+\347\075\221\353\345\175\335\076\234\361\317\222\254\154\110\314
24400
+\302\042\077\151\073\305\266\025\057\243\065\306\150\052\034\127
24401
+\257\071\357\215\320\065\303\030\014\173\000\126\034\315\213\031
24402
+\164\336\276\017\022\340\320\252\241\077\002\064\261\160\316\235
24403
+\030\326\010\003\011\106\356\140\340\176\266\304\111\004\121\175
24404
+\160\140\274\252\262\377\171\162\172\246\035\075\137\052\370\312
24405
+\342\375\071\267\107\271\353\176\337\004\043\257\372\234\006\007
24406
+\351\373\143\223\200\100\265\306\154\012\061\050\316\014\237\317
24407
+\263\043\065\200\101\215\154\304\067\173\201\057\200\241\100\102
24408
+\205\351\331\070\215\350\241\123\315\001\277\151\350\132\006\362
24409
+\105\013\220\372\256\341\277\235\362\256\127\074\245\256\262\126
24410
+\364\213\145\100\351\375\061\201\054\364\071\011\330\356\153\247
24411
+\264\246\035\025\245\230\367\001\201\330\205\175\363\121\134\161
24412
+\210\336\272\314\037\200\176\112
24413
+END
24414
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24415
+
24416
+# Trust for "emSign Root CA - G1"
24417
+# Issuer: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24418
+# Serial Number:31:f5:e4:62:0c:6c:58:ed:d6:d8
24419
+# Subject: CN=emSign Root CA - G1,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24420
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24421
+# Not Valid After : Wed Feb 18 18:30:00 2043
24422
+# Fingerprint (SHA-256): 40:F6:AF:03:46:A9:9A:A1:CD:1D:55:5A:4E:9C:CE:62:C7:F9:63:46:03:EE:40:66:15:83:3D:C8:C8:D0:03:67
24423
+# Fingerprint (SHA1): 8A:C7:AD:8F:73:AC:4E:C1:B5:75:4D:A5:40:F4:FC:CF:7C:B5:8E:8C
24424
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24425
+CKA_TOKEN CK_BBOOL CK_TRUE
24426
+CKA_PRIVATE CK_BBOOL CK_FALSE
24427
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24428
+CKA_LABEL UTF8 "emSign Root CA - G1"
24429
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24430
+\212\307\255\217\163\254\116\301\265\165\115\245\100\364\374\317
24431
+\174\265\216\214
24432
+END
24433
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24434
+\234\102\204\127\335\313\013\247\056\225\255\266\363\332\274\254
24435
+END
24436
+CKA_ISSUER MULTILINE_OCTAL
24437
+\060\147\061\013\060\011\006\003\125\004\006\023\002\111\116\061
24438
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24439
+\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145
24440
+\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147
24441
+\151\145\163\040\114\151\155\151\164\145\144\061\034\060\032\006
24442
+\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157
24443
+\164\040\103\101\040\055\040\107\061
24444
+END
24445
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24446
+\002\012\061\365\344\142\014\154\130\355\326\330
24447
+END
24448
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24449
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24450
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24451
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
24452
+
24453
+#
24454
+# Certificate "emSign ECC Root CA - G3"
24455
+#
24456
+# Issuer: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24457
+# Serial Number:3c:f6:07:a9:68:70:0e:da:8b:84
24458
+# Subject: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24459
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24460
+# Not Valid After : Wed Feb 18 18:30:00 2043
24461
+# Fingerprint (SHA-256): 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B
24462
+# Fingerprint (SHA1): 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1
24463
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
24464
+CKA_TOKEN CK_BBOOL CK_TRUE
24465
+CKA_PRIVATE CK_BBOOL CK_FALSE
24466
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24467
+CKA_LABEL UTF8 "emSign ECC Root CA - G3"
24468
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
24469
+CKA_SUBJECT MULTILINE_OCTAL
24470
+\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061
24471
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24472
+\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145
24473
+\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147
24474
+\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006
24475
+\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103
24476
+\040\122\157\157\164\040\103\101\040\055\040\107\063
24477
+END
24478
+CKA_ID UTF8 "0"
24479
+CKA_ISSUER MULTILINE_OCTAL
24480
+\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061
24481
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24482
+\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145
24483
+\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147
24484
+\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006
24485
+\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103
24486
+\040\122\157\157\164\040\103\101\040\055\040\107\063
24487
+END
24488
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24489
+\002\012\074\366\007\251\150\160\016\332\213\204
24490
+END
24491
+CKA_VALUE MULTILINE_OCTAL
24492
+\060\202\002\116\060\202\001\323\240\003\002\001\002\002\012\074
24493
+\366\007\251\150\160\016\332\213\204\060\012\006\010\052\206\110
24494
+\316\075\004\003\003\060\153\061\013\060\011\006\003\125\004\006
24495
+\023\002\111\116\061\023\060\021\006\003\125\004\013\023\012\145
24496
+\155\123\151\147\156\040\120\113\111\061\045\060\043\006\003\125
24497
+\004\012\023\034\145\115\165\144\150\162\141\040\124\145\143\150
24498
+\156\157\154\157\147\151\145\163\040\114\151\155\151\164\145\144
24499
+\061\040\060\036\006\003\125\004\003\023\027\145\155\123\151\147
24500
+\156\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040
24501
+\107\063\060\036\027\015\061\070\060\062\061\070\061\070\063\060
24502
+\060\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060
24503
+\060\132\060\153\061\013\060\011\006\003\125\004\006\023\002\111
24504
+\116\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151
24505
+\147\156\040\120\113\111\061\045\060\043\006\003\125\004\012\023
24506
+\034\145\115\165\144\150\162\141\040\124\145\143\150\156\157\154
24507
+\157\147\151\145\163\040\114\151\155\151\164\145\144\061\040\060
24508
+\036\006\003\125\004\003\023\027\145\155\123\151\147\156\040\105
24509
+\103\103\040\122\157\157\164\040\103\101\040\055\040\107\063\060
24510
+\166\060\020\006\007\052\206\110\316\075\002\001\006\005\053\201
24511
+\004\000\042\003\142\000\004\043\245\014\270\055\022\365\050\363
24512
+\261\262\335\342\002\022\200\236\071\137\111\115\237\311\045\064
24513
+\131\164\354\273\006\034\347\300\162\257\350\256\057\341\101\124
24514
+\207\024\250\112\262\350\174\202\346\133\152\265\334\263\165\316
24515
+\213\006\320\206\043\277\106\325\216\017\077\004\364\327\034\222
24516
+\176\366\245\143\302\365\137\216\056\117\241\030\031\002\053\062
24517
+\012\202\144\175\026\223\321\243\102\060\100\060\035\006\003\125
24518
+\035\016\004\026\004\024\174\135\002\204\023\324\314\212\233\201
24519
+\316\027\034\056\051\036\234\110\143\102\060\016\006\003\125\035
24520
+\017\001\001\377\004\004\003\002\001\006\060\017\006\003\125\035
24521
+\023\001\001\377\004\005\060\003\001\001\377\060\012\006\010\052
24522
+\206\110\316\075\004\003\003\003\151\000\060\146\002\061\000\276
24523
+\363\141\317\002\020\035\144\225\007\270\030\156\210\205\005\057
24524
+\203\010\027\220\312\037\212\114\350\015\033\172\261\255\325\201
24525
+\011\107\357\073\254\010\004\174\134\231\261\355\107\007\322\002
24526
+\061\000\235\272\125\374\251\112\350\355\355\346\166\001\102\173
24527
+\310\370\140\331\215\121\213\125\073\373\214\173\353\145\011\303
24528
+\370\226\315\107\250\202\362\026\125\167\044\176\022\020\225\004
24529
+\054\243
24530
+END
24531
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24532
+
24533
+# Trust for "emSign ECC Root CA - G3"
24534
+# Issuer: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24535
+# Serial Number:3c:f6:07:a9:68:70:0e:da:8b:84
24536
+# Subject: CN=emSign ECC Root CA - G3,O=eMudhra Technologies Limited,OU=emSign PKI,C=IN
24537
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24538
+# Not Valid After : Wed Feb 18 18:30:00 2043
24539
+# Fingerprint (SHA-256): 86:A1:EC:BA:08:9C:4A:8D:3B:BE:27:34:C6:12:BA:34:1D:81:3E:04:3C:F9:E8:A8:62:CD:5C:57:A3:6B:BE:6B
24540
+# Fingerprint (SHA1): 30:43:FA:4F:F2:57:DC:A0:C3:80:EE:2E:58:EA:78:B2:3F:E6:BB:C1
24541
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24542
+CKA_TOKEN CK_BBOOL CK_TRUE
24543
+CKA_PRIVATE CK_BBOOL CK_FALSE
24544
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24545
+CKA_LABEL UTF8 "emSign ECC Root CA - G3"
24546
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24547
+\060\103\372\117\362\127\334\240\303\200\356\056\130\352\170\262
24548
+\077\346\273\301
24549
+END
24550
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24551
+\316\013\162\321\237\210\216\320\120\003\350\343\270\213\147\100
24552
+END
24553
+CKA_ISSUER MULTILINE_OCTAL
24554
+\060\153\061\013\060\011\006\003\125\004\006\023\002\111\116\061
24555
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24556
+\040\120\113\111\061\045\060\043\006\003\125\004\012\023\034\145
24557
+\115\165\144\150\162\141\040\124\145\143\150\156\157\154\157\147
24558
+\151\145\163\040\114\151\155\151\164\145\144\061\040\060\036\006
24559
+\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103
24560
+\040\122\157\157\164\040\103\101\040\055\040\107\063
24561
+END
24562
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24563
+\002\012\074\366\007\251\150\160\016\332\213\204
24564
+END
24565
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24566
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24567
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24568
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
24569
+
24570
+#
24571
+# Certificate "emSign Root CA - C1"
24572
+#
24573
+# Issuer: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US
24574
+# Serial Number:00:ae:cf:00:ba:c4:cf:32:f8:43:b2
24575
+# Subject: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US
24576
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24577
+# Not Valid After : Wed Feb 18 18:30:00 2043
24578
+# Fingerprint (SHA-256): 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F
24579
+# Fingerprint (SHA1): E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01
24580
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
24581
+CKA_TOKEN CK_BBOOL CK_TRUE
24582
+CKA_PRIVATE CK_BBOOL CK_FALSE
24583
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24584
+CKA_LABEL UTF8 "emSign Root CA - C1"
24585
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
24586
+CKA_SUBJECT MULTILINE_OCTAL
24587
+\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061
24588
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24589
+\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145
24590
+\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003
24591
+\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164
24592
+\040\103\101\040\055\040\103\061
24593
+END
24594
+CKA_ID UTF8 "0"
24595
+CKA_ISSUER MULTILINE_OCTAL
24596
+\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061
24597
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24598
+\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145
24599
+\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003
24600
+\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164
24601
+\040\103\101\040\055\040\103\061
24602
+END
24603
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24604
+\002\013\000\256\317\000\272\304\317\062\370\103\262
24605
+END
24606
+CKA_VALUE MULTILINE_OCTAL
24607
+\060\202\003\163\060\202\002\133\240\003\002\001\002\002\013\000
24608
+\256\317\000\272\304\317\062\370\103\262\060\015\006\011\052\206
24609
+\110\206\367\015\001\001\013\005\000\060\126\061\013\060\011\006
24610
+\003\125\004\006\023\002\125\123\061\023\060\021\006\003\125\004
24611
+\013\023\012\145\155\123\151\147\156\040\120\113\111\061\024\060
24612
+\022\006\003\125\004\012\023\013\145\115\165\144\150\162\141\040
24613
+\111\156\143\061\034\060\032\006\003\125\004\003\023\023\145\155
24614
+\123\151\147\156\040\122\157\157\164\040\103\101\040\055\040\103
24615
+\061\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060
24616
+\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060
24617
+\132\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123
24618
+\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147
24619
+\156\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013
24620
+\145\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006
24621
+\003\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157
24622
+\164\040\103\101\040\055\040\103\061\060\202\001\042\060\015\006
24623
+\011\052\206\110\206\367\015\001\001\001\005\000\003\202\001\017
24624
+\000\060\202\001\012\002\202\001\001\000\317\353\251\271\361\231
24625
+\005\314\330\050\041\112\363\163\064\121\204\126\020\365\240\117
24626
+\054\022\343\372\023\232\047\320\317\371\171\032\164\137\035\171
24627
+\071\374\133\370\160\216\340\222\122\367\344\045\371\124\203\331
24628
+\035\323\310\132\205\077\136\307\266\007\356\076\300\316\232\257
24629
+\254\126\102\052\071\045\160\326\277\265\173\066\255\254\366\163
24630
+\334\315\327\035\212\203\245\373\053\220\025\067\153\034\046\107
24631
+\334\073\051\126\223\152\263\301\152\072\235\075\365\301\227\070
24632
+\130\005\213\034\021\343\344\264\270\135\205\035\203\376\170\137
24633
+\013\105\150\030\110\245\106\163\064\073\376\017\310\166\273\307
24634
+\030\363\005\321\206\363\205\355\347\271\331\062\255\125\210\316
24635
+\246\266\221\260\117\254\176\025\043\226\366\077\360\040\064\026
24636
+\336\012\306\304\004\105\171\177\247\375\276\322\251\245\257\234
24637
+\305\043\052\367\074\041\154\275\257\217\116\305\072\262\363\064
24638
+\022\374\337\200\032\111\244\324\251\225\367\236\211\136\242\211
24639
+\254\224\313\250\150\233\257\212\145\047\315\211\356\335\214\265
24640
+\153\051\160\103\240\151\013\344\271\017\002\003\001\000\001\243
24641
+\102\060\100\060\035\006\003\125\035\016\004\026\004\024\376\241
24642
+\340\160\036\052\003\071\122\132\102\276\134\221\205\172\030\252
24643
+\115\265\060\016\006\003\125\035\017\001\001\377\004\004\003\002
24644
+\001\006\060\017\006\003\125\035\023\001\001\377\004\005\060\003
24645
+\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001\013
24646
+\005\000\003\202\001\001\000\302\112\126\372\025\041\173\050\242
24647
+\351\345\035\373\370\055\304\071\226\101\114\073\047\054\304\154
24648
+\030\025\200\306\254\257\107\131\057\046\013\343\066\260\357\073
24649
+\376\103\227\111\062\231\022\025\133\337\021\051\377\253\123\370
24650
+\273\301\170\017\254\234\123\257\127\275\150\214\075\151\063\360
24651
+\243\240\043\143\073\144\147\042\104\255\325\161\313\126\052\170
24652
+\222\243\117\022\061\066\066\342\336\376\000\304\243\140\017\047
24653
+\255\240\260\212\265\066\172\122\241\275\047\364\040\047\142\350
24654
+\115\224\044\023\344\012\004\351\074\253\056\310\103\011\112\306
24655
+\141\004\345\111\064\176\323\304\310\365\017\300\252\351\272\124
24656
+\136\363\143\053\117\117\120\324\376\271\173\231\214\075\300\056
24657
+\274\002\053\323\304\100\344\212\007\061\036\233\316\046\231\023
24658
+\373\021\352\232\042\014\021\031\307\136\033\201\120\060\310\226
24659
+\022\156\347\313\101\177\221\073\242\107\267\124\200\033\334\000
24660
+\314\232\220\352\303\303\120\006\142\014\060\300\025\110\247\250
24661
+\131\174\341\256\042\242\342\012\172\017\372\142\253\122\114\341
24662
+\361\337\312\276\203\015\102
24663
+END
24664
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24665
+
24666
+# Trust for "emSign Root CA - C1"
24667
+# Issuer: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US
24668
+# Serial Number:00:ae:cf:00:ba:c4:cf:32:f8:43:b2
24669
+# Subject: CN=emSign Root CA - C1,O=eMudhra Inc,OU=emSign PKI,C=US
24670
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24671
+# Not Valid After : Wed Feb 18 18:30:00 2043
24672
+# Fingerprint (SHA-256): 12:56:09:AA:30:1D:A0:A2:49:B9:7A:82:39:CB:6A:34:21:6F:44:DC:AC:9F:39:54:B1:42:92:F2:E8:C8:60:8F
24673
+# Fingerprint (SHA1): E7:2E:F1:DF:FC:B2:09:28:CF:5D:D4:D5:67:37:B1:51:CB:86:4F:01
24674
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24675
+CKA_TOKEN CK_BBOOL CK_TRUE
24676
+CKA_PRIVATE CK_BBOOL CK_FALSE
24677
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24678
+CKA_LABEL UTF8 "emSign Root CA - C1"
24679
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24680
+\347\056\361\337\374\262\011\050\317\135\324\325\147\067\261\121
24681
+\313\206\117\001
24682
+END
24683
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24684
+\330\343\135\001\041\372\170\132\260\337\272\322\356\052\137\150
24685
+END
24686
+CKA_ISSUER MULTILINE_OCTAL
24687
+\060\126\061\013\060\011\006\003\125\004\006\023\002\125\123\061
24688
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24689
+\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145
24690
+\115\165\144\150\162\141\040\111\156\143\061\034\060\032\006\003
24691
+\125\004\003\023\023\145\155\123\151\147\156\040\122\157\157\164
24692
+\040\103\101\040\055\040\103\061
24693
+END
24694
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24695
+\002\013\000\256\317\000\272\304\317\062\370\103\262
24696
+END
24697
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24698
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24699
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24700
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
24701
+
24702
+#
24703
+# Certificate "emSign ECC Root CA - C3"
24704
+#
24705
+# Issuer: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US
24706
+# Serial Number:7b:71:b6:82:56:b8:12:7c:9c:a8
24707
+# Subject: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US
24708
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24709
+# Not Valid After : Wed Feb 18 18:30:00 2043
24710
+# Fingerprint (SHA-256): BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3
24711
+# Fingerprint (SHA1): B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66
24712
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
24713
+CKA_TOKEN CK_BBOOL CK_TRUE
24714
+CKA_PRIVATE CK_BBOOL CK_FALSE
24715
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24716
+CKA_LABEL UTF8 "emSign ECC Root CA - C3"
24717
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
24718
+CKA_SUBJECT MULTILINE_OCTAL
24719
+\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061
24720
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24721
+\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145
24722
+\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003
24723
+\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040
24724
+\122\157\157\164\040\103\101\040\055\040\103\063
24725
+END
24726
+CKA_ID UTF8 "0"
24727
+CKA_ISSUER MULTILINE_OCTAL
24728
+\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061
24729
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24730
+\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145
24731
+\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003
24732
+\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040
24733
+\122\157\157\164\040\103\101\040\055\040\103\063
24734
+END
24735
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24736
+\002\012\173\161\266\202\126\270\022\174\234\250
24737
+END
24738
+CKA_VALUE MULTILINE_OCTAL
24739
+\060\202\002\053\060\202\001\261\240\003\002\001\002\002\012\173
24740
+\161\266\202\126\270\022\174\234\250\060\012\006\010\052\206\110
24741
+\316\075\004\003\003\060\132\061\013\060\011\006\003\125\004\006
24742
+\023\002\125\123\061\023\060\021\006\003\125\004\013\023\012\145
24743
+\155\123\151\147\156\040\120\113\111\061\024\060\022\006\003\125
24744
+\004\012\023\013\145\115\165\144\150\162\141\040\111\156\143\061
24745
+\040\060\036\006\003\125\004\003\023\027\145\155\123\151\147\156
24746
+\040\105\103\103\040\122\157\157\164\040\103\101\040\055\040\103
24747
+\063\060\036\027\015\061\070\060\062\061\070\061\070\063\060\060
24748
+\060\132\027\015\064\063\060\062\061\070\061\070\063\060\060\060
24749
+\132\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123
24750
+\061\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147
24751
+\156\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013
24752
+\145\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006
24753
+\003\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103
24754
+\040\122\157\157\164\040\103\101\040\055\040\103\063\060\166\060
24755
+\020\006\007\052\206\110\316\075\002\001\006\005\053\201\004\000
24756
+\042\003\142\000\004\375\245\141\256\173\046\020\035\351\267\042
24757
+\060\256\006\364\201\263\261\102\161\225\071\274\323\122\343\257
24758
+\257\371\362\227\065\222\066\106\016\207\225\215\271\071\132\351
24759
+\273\337\320\376\310\007\101\074\273\125\157\203\243\152\373\142
24760
+\260\201\211\002\160\175\110\305\112\343\351\042\124\042\115\223
24761
+\273\102\014\257\167\234\043\246\175\327\141\021\316\145\307\370
24762
+\177\376\365\362\251\243\102\060\100\060\035\006\003\125\035\016
24763
+\004\026\004\024\373\132\110\320\200\040\100\362\250\351\000\007
24764
+\151\031\167\247\346\303\364\317\060\016\006\003\125\035\017\001
24765
+\001\377\004\004\003\002\001\006\060\017\006\003\125\035\023\001
24766
+\001\377\004\005\060\003\001\001\377\060\012\006\010\052\206\110
24767
+\316\075\004\003\003\003\150\000\060\145\002\061\000\264\330\057
24768
+\002\211\375\266\114\142\272\103\116\023\204\162\265\256\335\034
24769
+\336\326\265\334\126\217\130\100\132\055\336\040\114\042\203\312
24770
+\223\250\176\356\022\100\307\326\207\117\370\337\205\002\060\034
24771
+\024\144\344\174\226\203\021\234\260\321\132\141\113\246\017\111
24772
+\323\000\374\241\374\344\245\377\177\255\327\060\320\307\167\177
24773
+\276\201\007\125\060\120\040\024\365\127\070\012\250\061\121
24774
+END
24775
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24776
+
24777
+# Trust for "emSign ECC Root CA - C3"
24778
+# Issuer: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US
24779
+# Serial Number:7b:71:b6:82:56:b8:12:7c:9c:a8
24780
+# Subject: CN=emSign ECC Root CA - C3,O=eMudhra Inc,OU=emSign PKI,C=US
24781
+# Not Valid Before: Sun Feb 18 18:30:00 2018
24782
+# Not Valid After : Wed Feb 18 18:30:00 2043
24783
+# Fingerprint (SHA-256): BC:4D:80:9B:15:18:9D:78:DB:3E:1D:8C:F4:F9:72:6A:79:5D:A1:64:3C:A5:F1:35:8E:1D:DB:0E:DC:0D:7E:B3
24784
+# Fingerprint (SHA1): B6:AF:43:C2:9B:81:53:7D:F6:EF:6B:C3:1F:1F:60:15:0C:EE:48:66
24785
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24786
+CKA_TOKEN CK_BBOOL CK_TRUE
24787
+CKA_PRIVATE CK_BBOOL CK_FALSE
24788
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24789
+CKA_LABEL UTF8 "emSign ECC Root CA - C3"
24790
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24791
+\266\257\103\302\233\201\123\175\366\357\153\303\037\037\140\025
24792
+\014\356\110\146
24793
+END
24794
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24795
+\076\123\263\243\201\356\327\020\370\323\260\035\027\222\365\325
24796
+END
24797
+CKA_ISSUER MULTILINE_OCTAL
24798
+\060\132\061\013\060\011\006\003\125\004\006\023\002\125\123\061
24799
+\023\060\021\006\003\125\004\013\023\012\145\155\123\151\147\156
24800
+\040\120\113\111\061\024\060\022\006\003\125\004\012\023\013\145
24801
+\115\165\144\150\162\141\040\111\156\143\061\040\060\036\006\003
24802
+\125\004\003\023\027\145\155\123\151\147\156\040\105\103\103\040
24803
+\122\157\157\164\040\103\101\040\055\040\103\063
24804
+END
24805
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24806
+\002\012\173\161\266\202\126\270\022\174\234\250
24807
+END
24808
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24809
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24810
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24811
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
24812
+
24813
+#
24814
+# Certificate "Hongkong Post Root CA 3"
24815
+#
24816
+# Issuer: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK
24817
+# Serial Number:08:16:5f:8a:4c:a5:ec:00:c9:93:40:df:c4:c6:ae:23:b8:1c:5a:a4
24818
+# Subject: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK
24819
+# Not Valid Before: Sat Jun 03 02:29:46 2017
24820
+# Not Valid After : Tue Jun 03 02:29:46 2042
24821
+# Fingerprint (SHA-256): 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6
24822
+# Fingerprint (SHA1): 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02
24823
+CKA_CLASS CK_OBJECT_CLASS CKO_CERTIFICATE
24824
+CKA_TOKEN CK_BBOOL CK_TRUE
24825
+CKA_PRIVATE CK_BBOOL CK_FALSE
24826
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24827
+CKA_LABEL UTF8 "Hongkong Post Root CA 3"
24828
+CKA_CERTIFICATE_TYPE CK_CERTIFICATE_TYPE CKC_X_509
24829
+CKA_SUBJECT MULTILINE_OCTAL
24830
+\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061
24831
+\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113
24832
+\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157
24833
+\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012
24834
+\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061
24835
+\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157
24836
+\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040
24837
+\063
24838
+END
24839
+CKA_ID UTF8 "0"
24840
+CKA_ISSUER MULTILINE_OCTAL
24841
+\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061
24842
+\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113
24843
+\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157
24844
+\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012
24845
+\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061
24846
+\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157
24847
+\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040
24848
+\063
24849
+END
24850
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24851
+\002\024\010\026\137\212\114\245\354\000\311\223\100\337\304\306
24852
+\256\043\270\034\132\244
24853
+END
24854
+CKA_VALUE MULTILINE_OCTAL
24855
+\060\202\005\317\060\202\003\267\240\003\002\001\002\002\024\010
24856
+\026\137\212\114\245\354\000\311\223\100\337\304\306\256\043\270
24857
+\034\132\244\060\015\006\011\052\206\110\206\367\015\001\001\013
24858
+\005\000\060\157\061\013\060\011\006\003\125\004\006\023\002\110
24859
+\113\061\022\060\020\006\003\125\004\010\023\011\110\157\156\147
24860
+\040\113\157\156\147\061\022\060\020\006\003\125\004\007\023\011
24861
+\110\157\156\147\040\113\157\156\147\061\026\060\024\006\003\125
24862
+\004\012\023\015\110\157\156\147\153\157\156\147\040\120\157\163
24863
+\164\061\040\060\036\006\003\125\004\003\023\027\110\157\156\147
24864
+\153\157\156\147\040\120\157\163\164\040\122\157\157\164\040\103
24865
+\101\040\063\060\036\027\015\061\067\060\066\060\063\060\062\062
24866
+\071\064\066\132\027\015\064\062\060\066\060\063\060\062\062\071
24867
+\064\066\132\060\157\061\013\060\011\006\003\125\004\006\023\002
24868
+\110\113\061\022\060\020\006\003\125\004\010\023\011\110\157\156
24869
+\147\040\113\157\156\147\061\022\060\020\006\003\125\004\007\023
24870
+\011\110\157\156\147\040\113\157\156\147\061\026\060\024\006\003
24871
+\125\004\012\023\015\110\157\156\147\153\157\156\147\040\120\157
24872
+\163\164\061\040\060\036\006\003\125\004\003\023\027\110\157\156
24873
+\147\153\157\156\147\040\120\157\163\164\040\122\157\157\164\040
24874
+\103\101\040\063\060\202\002\042\060\015\006\011\052\206\110\206
24875
+\367\015\001\001\001\005\000\003\202\002\017\000\060\202\002\012
24876
+\002\202\002\001\000\263\210\327\352\316\017\040\116\276\346\326
24877
+\003\155\356\131\374\302\127\337\051\150\241\203\016\076\150\307
24878
+\150\130\234\034\140\113\211\103\014\271\324\025\262\356\301\116
24879
+\165\351\265\247\357\345\351\065\231\344\314\034\347\113\137\215
24880
+\063\060\040\063\123\331\246\273\325\076\023\216\351\037\207\111
24881
+\255\120\055\120\312\030\276\001\130\242\023\160\226\273\211\210
24882
+\126\200\134\370\275\054\074\341\114\127\210\273\323\271\225\357
24883
+\313\307\366\332\061\164\050\246\346\124\211\365\101\061\312\345
24884
+\046\032\315\202\340\160\332\073\051\273\325\003\365\231\272\125
24885
+\365\144\321\140\016\263\211\111\270\212\057\005\322\204\105\050
24886
+\174\217\150\120\022\170\374\013\265\123\313\302\230\034\204\243
24887
+\236\260\276\043\244\332\334\310\053\036\332\156\105\036\211\230
24888
+\332\371\000\056\006\351\014\073\160\325\120\045\210\231\313\315
24889
+\163\140\367\325\377\065\147\305\241\274\136\253\315\112\270\105
24890
+\353\310\150\036\015\015\024\106\022\343\322\144\142\212\102\230
24891
+\274\264\306\010\010\370\375\250\114\144\234\166\001\275\057\251
24892
+\154\063\017\330\077\050\270\074\151\001\102\206\176\151\301\311
24893
+\006\312\345\172\106\145\351\302\326\120\101\056\077\267\344\355
24894
+\154\327\277\046\001\021\242\026\051\112\153\064\006\220\354\023
24895
+\322\266\373\152\166\322\074\355\360\326\055\335\341\025\354\243
24896
+\233\057\054\311\076\053\344\151\073\377\162\045\261\066\206\133
24897
+\307\177\153\213\125\033\112\305\040\141\075\256\313\120\341\010
24898
+\072\276\260\217\143\101\123\060\010\131\074\230\035\167\272\143
24899
+\221\172\312\020\120\140\277\360\327\274\225\207\217\227\305\376
24900
+\227\152\001\224\243\174\133\205\035\052\071\072\320\124\241\321
24901
+\071\161\235\375\041\371\265\173\360\342\340\002\217\156\226\044
24902
+\045\054\240\036\054\250\304\211\247\357\355\231\006\057\266\012
24903
+\114\117\333\242\314\067\032\257\107\205\055\212\137\304\064\064
24904
+\114\000\375\030\223\147\023\321\067\346\110\264\213\006\305\127
24905
+\173\031\206\012\171\313\000\311\122\257\102\377\067\217\341\243
24906
+\036\172\075\120\253\143\006\347\025\265\077\266\105\067\224\067
24907
+\261\176\362\110\303\177\305\165\376\227\215\105\217\032\247\032
24908
+\162\050\032\100\017\002\003\001\000\001\243\143\060\141\060\017
24909
+\006\003\125\035\023\001\001\377\004\005\060\003\001\001\377\060
24910
+\016\006\003\125\035\017\001\001\377\004\004\003\002\001\006\060
24911
+\037\006\003\125\035\043\004\030\060\026\200\024\027\235\315\036
24912
+\213\326\071\053\160\323\134\324\240\270\037\260\000\374\305\141
24913
+\060\035\006\003\125\035\016\004\026\004\024\027\235\315\036\213
24914
+\326\071\053\160\323\134\324\240\270\037\260\000\374\305\141\060
24915
+\015\006\011\052\206\110\206\367\015\001\001\013\005\000\003\202
24916
+\002\001\000\126\325\173\156\346\042\001\322\102\233\030\325\016
24917
+\327\146\043\134\343\376\240\307\222\322\351\224\255\113\242\306
24918
+\354\022\174\164\325\110\322\131\024\231\300\353\271\321\353\364
24919
+\110\060\133\255\247\127\163\231\251\323\345\267\321\056\131\044
24920
+\130\334\150\056\056\142\330\152\344\160\013\055\040\120\040\244
24921
+\062\225\321\000\230\273\323\375\367\062\362\111\256\306\172\340
24922
+\107\276\156\316\313\243\162\072\055\151\135\313\310\350\105\071
24923
+\324\372\102\301\021\114\167\135\222\373\152\377\130\104\345\353
24924
+\201\236\257\240\231\255\276\251\001\146\313\070\035\074\337\103
24925
+\037\364\115\156\264\272\027\106\374\175\375\207\201\171\152\015
24926
+\063\017\372\057\370\024\271\200\263\135\115\252\227\341\371\344
24927
+\030\305\370\325\070\214\046\074\375\362\050\342\356\132\111\210
24928
+\054\337\171\075\216\236\220\074\275\101\112\072\335\133\366\232
24929
+\264\316\077\045\060\177\062\175\242\003\224\320\334\172\241\122
24930
+\336\156\223\215\030\046\375\125\254\275\217\233\322\317\257\347
24931
+\206\054\313\037\011\157\243\157\251\204\324\163\277\115\241\164
24932
+\033\116\043\140\362\314\016\252\177\244\234\114\045\250\262\146
24933
+\073\070\377\331\224\060\366\162\204\276\150\125\020\017\306\163
24934
+\054\026\151\223\007\376\261\105\355\273\242\125\152\260\332\265
24935
+\112\002\045\047\205\327\267\267\206\104\026\211\154\200\053\076
24936
+\227\251\234\325\176\125\114\306\336\105\020\034\352\351\073\237
24937
+\003\123\356\356\172\001\002\026\170\324\350\302\276\106\166\210
24938
+\023\077\042\273\110\022\035\122\000\264\002\176\041\032\036\234
24939
+\045\364\363\075\136\036\322\034\371\263\055\266\367\067\134\306
24940
+\313\041\116\260\367\231\107\030\205\301\053\272\125\256\006\352
24941
+\320\007\262\334\253\320\202\226\165\316\322\120\376\231\347\317
24942
+\057\237\347\166\321\141\052\373\041\273\061\320\252\237\107\244
24943
+\262\042\312\026\072\120\127\304\133\103\147\305\145\142\003\111
24944
+\001\353\103\331\330\370\236\255\317\261\143\016\105\364\240\132
24945
+\054\233\055\305\246\300\255\250\107\364\047\114\070\015\056\033
24946
+\111\073\122\364\350\210\203\053\124\050\324\362\065\122\264\062
24947
+\203\142\151\144\014\221\234\237\227\352\164\026\375\037\021\006
24948
+\232\233\364
24949
+END
24950
+CKA_NSS_MOZILLA_CA_POLICY CK_BBOOL CK_TRUE
24951
+
24952
+# Trust for "Hongkong Post Root CA 3"
24953
+# Issuer: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK
24954
+# Serial Number:08:16:5f:8a:4c:a5:ec:00:c9:93:40:df:c4:c6:ae:23:b8:1c:5a:a4
24955
+# Subject: CN=Hongkong Post Root CA 3,O=Hongkong Post,L=Hong Kong,ST=Hong Kong,C=HK
24956
+# Not Valid Before: Sat Jun 03 02:29:46 2017
24957
+# Not Valid After : Tue Jun 03 02:29:46 2042
24958
+# Fingerprint (SHA-256): 5A:2F:C0:3F:0C:83:B0:90:BB:FA:40:60:4B:09:88:44:6C:76:36:18:3D:F9:84:6E:17:10:1A:44:7F:B8:EF:D6
24959
+# Fingerprint (SHA1): 58:A2:D0:EC:20:52:81:5B:C1:F3:F8:64:02:24:4E:C2:8E:02:4B:02
24960
+CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST
24961
+CKA_TOKEN CK_BBOOL CK_TRUE
24962
+CKA_PRIVATE CK_BBOOL CK_FALSE
24963
+CKA_MODIFIABLE CK_BBOOL CK_FALSE
24964
+CKA_LABEL UTF8 "Hongkong Post Root CA 3"
24965
+CKA_CERT_SHA1_HASH MULTILINE_OCTAL
24966
+\130\242\320\354\040\122\201\133\301\363\370\144\002\044\116\302
24967
+\216\002\113\002
24968
+END
24969
+CKA_CERT_MD5_HASH MULTILINE_OCTAL
24970
+\021\374\237\275\163\060\002\212\375\077\363\130\271\313\040\360
24971
+END
24972
+CKA_ISSUER MULTILINE_OCTAL
24973
+\060\157\061\013\060\011\006\003\125\004\006\023\002\110\113\061
24974
+\022\060\020\006\003\125\004\010\023\011\110\157\156\147\040\113
24975
+\157\156\147\061\022\060\020\006\003\125\004\007\023\011\110\157
24976
+\156\147\040\113\157\156\147\061\026\060\024\006\003\125\004\012
24977
+\023\015\110\157\156\147\153\157\156\147\040\120\157\163\164\061
24978
+\040\060\036\006\003\125\004\003\023\027\110\157\156\147\153\157
24979
+\156\147\040\120\157\163\164\040\122\157\157\164\040\103\101\040
24980
+\063
24981
+END
24982
+CKA_SERIAL_NUMBER MULTILINE_OCTAL
24983
+\002\024\010\026\137\212\114\245\354\000\311\223\100\337\304\306
24984
+\256\043\270\034\132\244
24985
+END
24986
+CKA_TRUST_SERVER_AUTH CK_TRUST CKT_NSS_TRUSTED_DELEGATOR
24987
+CKA_TRUST_EMAIL_PROTECTION CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24988
+CKA_TRUST_CODE_SIGNING CK_TRUST CKT_NSS_MUST_VERIFY_TRUST
24989
+CKA_TRUST_STEP_UP_APPROVED CK_BBOOL CK_FALSE
... ...
@@ -1,19 +1,19 @@
1 1
 Summary:        Calico networking for CNI
2 2
 Name:           calico-cni
3
-Version:        1.11.2
4
-Release:        3%{?dist}
3
+Version:        3.6.1
4
+Release:        1%{?dist}
5 5
 License:        ASL 2.0
6 6
 URL:            https://github.com/projectcalico/cni-plugin
7 7
 Source0:        %{name}-%{version}.tar.gz
8
-%define sha1 calico-cni=c12ce655eb5b1cd42c3976d6bf4ac3ebcbc4dc86
8
+%define sha1 calico-cni=e60d82f07543229e1249fe377840ff0b3a019f8f
9 9
 Source1:        %{name}-vendor-cache-%{version}.tar.gz
10
-%define sha1 calico-cni-vendor-cache=7c64de41b90cc74231090441ff359936689737df
10
+%define sha1 calico-cni-vendor-cache=9be4dba31d2ca0a9154a5b8a6f722b1f19c8abd1
11 11
 Group:          Development/Tools
12 12
 Vendor:         VMware, Inc.
13 13
 Distribution:   Photon
14 14
 BuildRequires:  git
15 15
 BuildRequires:  glide
16
-BuildRequires:  go = 1.9.7
16
+BuildRequires:  go >= 1.11.9
17 17
 Requires:       cni
18 18
 %define debug_package %{nil}
19 19
 
... ...
@@ -39,8 +39,8 @@ mkdir -p ~/.glide
39 39
 tar -C ~/.glide -xf %{SOURCE1}
40 40
 glide install --strip-vendor
41 41
 mkdir -p dist
42
-CGO_ENABLED=0 go build -v -i -o dist/calico -ldflags "-X main.VERSION= -s -w" calico.go
43
-CGO_ENABLED=0 go build -v -i -o dist/calico-ipam -ldflags "-X main.VERSION= -s -w" ipam/calico-ipam.go
42
+CGO_ENABLED=0 go build -v -i -o dist/calico -ldflags "-X main.VERSION= -s -w" cmd/calico/calico.go
43
+CGO_ENABLED=0 go build -v -i -o dist/calico-ipam -ldflags "-X main.VERSION= -s -w" cmd/calico-ipam/calico-ipam.go
44 44
 
45 45
 %install
46 46
 cd ../build/src/github.com/projectcalico/cni-plugin
... ...
@@ -59,6 +59,8 @@ install -vpm 0755 -t %{buildroot}/usr/share/calico-cni/k8s/ k8s-install/scripts/
59 59
 /usr/share/calico-cni/k8s/calico.conf.default
60 60
 
61 61
 %changelog
62
+*   Wed May 08 2019 Ashwin H <ashwinh@vmware.com> 3.6.1-1
63
+-   Update to 3.6.1
62 64
 *   Mon Jan 21 2019 Bo Gan <ganb@vmware.com> 1.11.2-3
63 65
 -   Build using go 1.9.7
64 66
 *   Mon Sep 24 2018 Tapas Kundu <tkundu@vmware.com> 1.11.2-2
... ...
@@ -1,61 +1,54 @@
1 1
 Summary:        Calico node and documentation for project calico.
2 2
 Name:           calico
3
-Version:        2.6.7
4
-Release:        4%{?dist}
3
+Version:        3.6.1
4
+Release:        1%{?dist}
5 5
 License:        Apache-2.0
6 6
 URL:            https://github.com/projectcalico/calico
7 7
 Source0:        %{name}-%{version}.tar.gz
8
-%define sha1 calico=d74b2103f84ed470322b5f33b75cf552db93d830
9
-Source1:         go-27704.patch
10
-Source2:         go-27842.patch
8
+%define sha1 calico=43310c3ae20b7806ae030d11ae99c135a35badac
11 9
 Group:          Development/Tools
12 10
 Vendor:         VMware, Inc.
13 11
 Distribution:   Photon
14 12
 BuildRequires:  git
15 13
 BuildRequires:  glide
16
-BuildRequires:  go = 1.9.7
14
+BuildRequires:  go >= 1.11
17 15
 BuildRequires:  make
18 16
 
19 17
 %description
20 18
 Calico node is a container that bundles together various components reqiured for networking containers using project calico. This includes key components such as felix agent for programming routes and ACLs, BIRD routing daemon, and confd datastore monitor engine.
21 19
 
22 20
 %prep
23
-%setup
21
+%setup -n node-%{version}
24 22
 
25 23
 %build
26 24
 mkdir -p /root/.glide
27
-mkdir -p ${GOPATH}/src/github.com/projectcalico/calico
28
-cp -r * ${GOPATH}/src/github.com/projectcalico/calico/.
29
-pushd ${GOPATH}/src/github.com/projectcalico/calico
30
-cd calico_node
25
+mkdir -p ${GOPATH}/src/github.com/projectcalico/node
26
+cp -r * ${GOPATH}/src/github.com/projectcalico/node
27
+pushd ${GOPATH}/src/github.com/projectcalico/node
31 28
 glide install --strip-vendor
32
-pushd vendor/golang.org/x/net
33
-patch -p1 < %{SOURCE1}
34
-patch -p1 < %{SOURCE2}
35
-popd
36 29
 mkdir -p dist
37 30
 mkdir -p .go-pkg-cache
38
-make CALICO_GIT_VER=%{version} allocate-ipip-addr
39
-make CALICO_GIT_VER=%{version} startup
31
+GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -v -i -o dist/calico-node cmd/calico-node/main.go
32
+popd
40 33
 
41 34
 %install
42
-pushd ${GOPATH}/src/github.com/projectcalico/calico
35
+pushd ${GOPATH}/src/github.com/projectcalico
43 36
 install -vdm 755 %{buildroot}%{_bindir}
44
-install calico_node/dist/allocate-ipip-addr %{buildroot}%{_bindir}/
45
-install calico_node/dist/startup %{buildroot}%{_bindir}/
37
+install node/dist/calico-node %{buildroot}%{_bindir}/
46 38
 install -vdm 0755 %{buildroot}/usr/share/calico/docker/fs
47
-cp -r calico_node/filesystem/etc %{buildroot}/usr/share/calico/docker/fs/
48
-cp -r calico_node/filesystem/sbin %{buildroot}/usr/share/calico/docker/fs/
39
+cp -r node/filesystem/etc %{buildroot}/usr/share/calico/docker/fs/
40
+cp -r node/filesystem/sbin %{buildroot}/usr/share/calico/docker/fs/
49 41
 sed -i 's/. startup.env/source \/startup.env/g' %{buildroot}/usr/share/calico/docker/fs/etc/rc.local
50 42
 sed -i 's/. startup.env/source \/startup.env/g' %{buildroot}/usr/share/calico/docker/fs/sbin/start_runit
51 43
 
52 44
 %files
53 45
 %defattr(-,root,root)
54
-%{_bindir}/allocate-ipip-addr
55
-%{_bindir}/startup
46
+%{_bindir}/calico-node
56 47
 /usr/share/calico/docker/fs/*
57 48
 
58 49
 %changelog
50
+*   Wed May 08 2019 Ashwin H <ashwinh@vmware.com> 3.6.1-1
51
+-   Update to 3.6.1
59 52
 *   Mon Jan 28 2019 Bo Gan <ganb@vmware.com> 2.6.7-4
60 53
 -   Fix CVE-2018-17846 and CVE-2018-17143
61 54
 *   Mon Jan 21 2019 Bo Gan <ganb@vmware.com> 2.6.7-3
... ...
@@ -1,11 +1,11 @@
1 1
 Summary:        Container Network Interface (CNI) plugins
2 2
 Name:           cni
3
-Version:        0.6.0
3
+Version:        0.7.5
4 4
 Release:        1%{?dist}
5 5
 License:        ASL 2.0
6 6
 URL:            https://github.com/containernetworking/cni
7 7
 Source0:        https://github.com/containernetworking/cni/archive/%{name}-v%{version}.tar.gz
8
-%define sha1 cni=f273e53c6d019d5cc9dfb75b48e619aa52abcce7
8
+%define sha1 cni=e980fff2a3e6446b70c3e0beb22ca53853259d4d
9 9
 Group:          Development/Tools
10 10
 Vendor:         VMware, Inc.
11 11
 Distribution:   Photon
... ...
@@ -37,6 +37,8 @@ make -k check |& tee %{_specdir}/%{name}-check-log || %{nocheck}
37 37
 %{_default_cni_plugins_dir}/*
38 38
 
39 39
 %changelog
40
+*   Tue Apr 02 2019 Ashwin H <ashwinh@vmware.com> 0.7.5-1
41
+-   Update cni to v0.7.5
40 42
 *   Tue Dec 05 2017 Vinay Kulkarni <kulkarniv@vmware.com> 0.6.0-1
41 43
 -   cni v0.6.0.
42 44
 *   Fri Apr 7 2017 Alexey Makhalov <amakhalov@vmware.com> 0.5.1-1
43 45
new file mode 100644
... ...
@@ -0,0 +1,116 @@
0
+%global goroot          /usr/lib/golang
1
+%global gopath          %{_datadir}/gocode
2
+%ifarch aarch64
3
+%global gohostarch      arm64
4
+%else
5
+%global gohostarch      amd64
6
+%endif
7
+%define debug_package %{nil}
8
+%define __strip /bin/true
9
+
10
+# rpmbuild magic to keep from having meta dependency on libc.so.6
11
+#%define _use_internal_dependency_generator 0
12
+#%define __find_requires %{nil}
13
+
14
+Summary:        Go
15
+Name:           go
16
+Version:        1.11.9
17
+Release:        1%{?dist}
18
+License:        BSD
19
+URL:            https://golang.org
20
+Group:          System Environment/Security
21
+Vendor:         VMware, Inc.
22
+Distribution:   Photon
23
+Source0:        https://dl.google.com/go/%{name}%{version}.src.tar.gz
24
+%define sha1    go=3790ca6533cce6933eafd34b2a74a7025e3caba7
25
+Requires:       glibc
26
+%define ExtraBuildRequires go
27
+
28
+%description
29
+Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
30
+
31
+%prep
32
+%setup -qn %{name}
33
+
34
+%build
35
+export GOHOSTOS=linux
36
+export GOHOSTARCH=%{gohostarch}
37
+export GOROOT_BOOTSTRAP=%{goroot}
38
+
39
+export GOROOT="`pwd`"
40
+export GOPATH=%{gopath}
41
+export GOROOT_FINAL=%{_bindir}/go
42
+rm -f  %{gopath}/src/runtime/*.c
43
+pushd src
44
+./make.bash --no-clean
45
+popd
46
+
47
+%install
48
+rm -rf %{buildroot}
49
+
50
+mkdir -p %{buildroot}%{_bindir}
51
+mkdir -p %{buildroot}%{goroot}
52
+
53
+cp -R api bin doc favicon.ico lib pkg robots.txt src misc VERSION %{buildroot}%{goroot}
54
+
55
+# remove the unnecessary zoneinfo file (Go will always use the system one first)
56
+rm -rfv %{buildroot}%{goroot}/lib/time
57
+
58
+# remove the doc Makefile
59
+rm -rfv %{buildroot}%{goroot}/doc/Makefile
60
+
61
+# put binaries to bindir, linked to the arch we're building,
62
+# leave the arch independent pieces in %{goroot}
63
+mkdir -p %{buildroot}%{goroot}/bin/linux_%{gohostarch}
64
+ln -sfv ../go %{buildroot}%{goroot}/bin/linux_%{gohostarch}/go
65
+ln -sfv ../gofmt %{buildroot}%{goroot}/bin/linux_%{gohostarch}/gofmt
66
+ln -sfv %{goroot}/bin/gofmt %{buildroot}%{_bindir}/gofmt
67
+ln -sfv %{goroot}/bin/go %{buildroot}%{_bindir}/go
68
+
69
+# ensure these exist and are owned
70
+mkdir -p %{buildroot}%{gopath}/src/github.com/
71
+mkdir -p %{buildroot}%{gopath}/src/bitbucket.org/
72
+mkdir -p %{buildroot}%{gopath}/src/code.google.com/
73
+mkdir -p %{buildroot}%{gopath}/src/code.google.com/p/
74
+
75
+install -vdm755 %{buildroot}/etc/profile.d
76
+cat >> %{buildroot}/etc/profile.d/go-exports.sh <<- "EOF"
77
+export GOROOT=%{goroot}
78
+export GOPATH=%{_datadir}/gocode
79
+export GOHOSTOS=linux
80
+export GOHOSTARCH=%{gohostarch}
81
+export GOOS=linux
82
+EOF
83
+#chown -R root:root %{buildroot}/etc/profile.d/go-exports.sh
84
+
85
+
86
+#%{_fixperms} %{buildroot}/*
87
+
88
+%post -p /sbin/ldconfig
89
+
90
+%postun
91
+/sbin/ldconfig
92
+if [ $1 -eq 0 ]; then
93
+  #This is uninstall
94
+  rm /etc/profile.d/go-exports.sh
95
+  rm -rf /opt/%{name}
96
+  exit 0
97
+fi
98
+
99
+%clean
100
+rm -rf %{buildroot}/*
101
+
102
+%files
103
+%defattr(-,root,root)
104
+%exclude %{goroot}/src/*.rc
105
+%exclude %{goroot}/include/plan9
106
+/etc/profile.d/go-exports.sh
107
+%{goroot}/*
108
+%{gopath}/src
109
+%exclude %{goroot}/src/pkg/debug/dwarf/testdata
110
+%exclude %{goroot}/src/pkg/debug/elf/testdata
111
+%{_bindir}/*
112
+
113
+%changelog
114
+*   Wed Apr 24 2019 <ashwinh@vmware.com> 1.11.9-1
115
+-   Initial build for 1.11.9
0 116
deleted file mode 100644
... ...
@@ -1,10754 +0,0 @@
1
-From f8d5684a26a77a20e4e77aff73ca9c96ac063ed4 Mon Sep 17 00:00:00 2001
2
-From: DheerajSShetty <dheerajs@vmware.com>
3
-Date: Tue, 16 Oct 2018 15:49:44 -0700
4
-Subject: [PATCH]  VKE patch for k8s 1.11.3 (350444)
5
-
6
- api/swagger-spec/apps_v1alpha1.json                |   21 +
7
- api/swagger-spec/apps_v1beta1.json                 |   21 +
8
- api/swagger-spec/apps_v1beta2.json                 |   21 +
9
- api/swagger-spec/batch_v1.json                     |   21 +
10
- api/swagger-spec/batch_v1beta1.json                |   21 +
11
- api/swagger-spec/batch_v2alpha1.json               |   21 +
12
- api/swagger-spec/extensions_v1beta1.json           |   21 +
13
- api/swagger-spec/settings.k8s.io_v1alpha1.json     |   21 +
14
- api/swagger-spec/v1.json                           |   25 +
15
- cmd/kube-controller-manager/app/BUILD              |    1 +
16
- cmd/kube-controller-manager/app/plugins.go         |    4 +
17
- cmd/kubelet/app/BUILD                              |    1 +
18
- cmd/kubelet/app/plugins.go                         |    2 +
19
- pkg/apis/core/types.go                             |   14 +
20
- pkg/apis/core/validation/validation.go             |   25 +
21
- pkg/apis/policy/types.go                           |    1 +
22
- pkg/cloudprovider/providers/BUILD                  |    2 +
23
- pkg/cloudprovider/providers/cascade/BUILD          |   56 +
24
- pkg/cloudprovider/providers/cascade/OWNERS         |    3 +
25
- pkg/cloudprovider/providers/cascade/apitypes.go    |  230 ++
26
- pkg/cloudprovider/providers/cascade/auth.go        |  145 ++
27
- pkg/cloudprovider/providers/cascade/cascade.go     |  215 ++
28
- .../providers/cascade/cascade_disks.go             |  228 ++
29
- .../providers/cascade/cascade_instances.go         |  132 +
30
- .../providers/cascade/cascade_instances_test.go    |   44 +
31
- .../providers/cascade/cascade_loadbalancer.go      |  285 +++
32
- pkg/cloudprovider/providers/cascade/client.go      |  399 +++
33
- pkg/cloudprovider/providers/cascade/oidcclient.go  |  297 +++
34
- pkg/cloudprovider/providers/cascade/restclient.go  |  262 ++
35
- pkg/cloudprovider/providers/cascade/tests_owed     |    5 +
36
- pkg/cloudprovider/providers/cascade/utils.go       |   29 +
37
- pkg/cloudprovider/providers/providers.go           |    1 +
38
- pkg/kubeapiserver/authorizer/config.go             |    8 +-
39
- pkg/kubeapiserver/authorizer/modes/modes.go        |    3 +-
40
- pkg/kubeapiserver/options/plugins.go               |    3 +
41
- pkg/printers/internalversion/describe.go           |   11 +
42
- pkg/security/podsecuritypolicy/util/util.go        |    3 +
43
- pkg/volume/cascade_disk/BUILD                      |   43 +
44
- pkg/volume/cascade_disk/OWNERS                     |    2 +
45
- pkg/volume/cascade_disk/attacher.go                |  264 ++
46
- pkg/volume/cascade_disk/cascade_disk.go            |  390 +++
47
- pkg/volume/cascade_disk/cascade_util.go            |  162 ++
48
- .../storage/persistentvolume/label/admission.go    |   54 +
49
- plugin/pkg/admission/vke/BUILD                     |   61 +
50
- plugin/pkg/admission/vke/admission.go              |  624 +++++
51
- plugin/pkg/admission/vke/admission_test.go         |  960 +++++++
52
- plugin/pkg/auth/authorizer/vke/BUILD               |   40 +
53
- plugin/pkg/auth/authorizer/vke/OWNERS              |    2 +
54
- plugin/pkg/auth/authorizer/vke/vke_authorizer.go   |  125 +
55
- .../pkg/auth/authorizer/vke/vke_authorizer_test.go |  230 ++
56
- staging/src/k8s.io/api/core/v1/generated.pb.go     | 2686 +++++++++++---------
57
- staging/src/k8s.io/api/core/v1/types.go            |   24 +-
58
- 52 files changed, 7054 insertions(+), 1215 deletions(-)
59
-
60
-diff --git a/api/swagger-spec/apps_v1alpha1.json b/api/swagger-spec/apps_v1alpha1.json
61
-index 6f54662..0ce6f3f 100644
62
-+++ b/api/swagger-spec/apps_v1alpha1.json
63
-@@ -1459,6 +1459,10 @@
64
-      "photonPersistentDisk": {
65
-       "$ref": "v1.PhotonPersistentDiskVolumeSource",
66
-       "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
67
-+     },
68
-+     "vkeDisk": {
69
-+      "$ref": "v1.CascadeDiskVolumeSource",
70
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
71
-      }
72
-     }
73
-    },
74
-@@ -2109,6 +2113,23 @@
75
-      }
76
-     }
77
-    },
78
-+   "v1.CascadeDiskVolumeSource": {
79
-+    "id": "v1.CascadeDiskVolumeSource",
80
-+    "description": "Represents a Cascade persistent disk resource.",
81
-+    "required": [
82
-+     "diskID"
83
-+    ],
84
-+    "properties": {
85
-+     "diskID": {
86
-+      "type": "string",
87
-+      "description": "ID that identifies Cascade persistent disk"
88
-+     },
89
-+     "fsType": {
90
-+      "type": "string",
91
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
92
-+     }
93
-+    }
94
-+   },
95
-    "v1.Container": {
96
-     "id": "v1.Container",
97
-     "description": "A single application container that you want to run within a pod.",
98
-diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json
99
-index eaacb45..dfe9400 100644
100
-+++ b/api/swagger-spec/apps_v1beta1.json
101
-@@ -4490,6 +4490,10 @@
102
-       "$ref": "v1.PhotonPersistentDiskVolumeSource",
103
-       "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
104
-      },
105
-+     "vkeDisk": {
106
-+      "$ref": "v1.CascadeDiskVolumeSource",
107
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
108
-+     },
109
-      "projected": {
110
-       "$ref": "v1.ProjectedVolumeSource",
111
-       "description": "Items for all in one resources secrets, configmaps, and downward API"
112
-@@ -5221,6 +5225,23 @@
113
-      }
114
-     }
115
-    },
116
-+   "v1.CascadeDiskVolumeSource": {
117
-+    "id": "v1.CascadeDiskVolumeSource",
118
-+    "description": "Represents a Cascade persistent disk resource.",
119
-+    "required": [
120
-+     "diskID"
121
-+    ],
122
-+    "properties": {
123
-+     "diskID": {
124
-+      "type": "string",
125
-+      "description": "ID that identifies Cascade persistent disk"
126
-+     },
127
-+     "fsType": {
128
-+      "type": "string",
129
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
130
-+     }
131
-+    }
132
-+   },
133
-    "v1.ProjectedVolumeSource": {
134
-     "id": "v1.ProjectedVolumeSource",
135
-     "description": "Represents a projected volume source",
136
-diff --git a/api/swagger-spec/apps_v1beta2.json b/api/swagger-spec/apps_v1beta2.json
137
-index d6bc46e..1c60717 100644
138
-+++ b/api/swagger-spec/apps_v1beta2.json
139
-@@ -6856,6 +6856,10 @@
140
-       "$ref": "v1.PhotonPersistentDiskVolumeSource",
141
-       "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
142
-      },
143
-+     "vkeDisk": {
144
-+      "$ref": "v1.CascadeDiskVolumeSource",
145
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
146
-+     },
147
-      "projected": {
148
-       "$ref": "v1.ProjectedVolumeSource",
149
-       "description": "Items for all in one resources secrets, configmaps, and downward API"
150
-@@ -7587,6 +7591,23 @@
151
-      }
152
-     }
153
-    },
154
-+   "v1.CascadeDiskVolumeSource": {
155
-+    "id": "v1.CascadeDiskVolumeSource",
156
-+    "description": "Represents a Cascade persistent disk resource.",
157
-+    "required": [
158
-+     "diskID"
159
-+    ],
160
-+    "properties": {
161
-+     "diskID": {
162
-+      "type": "string",
163
-+      "description": "ID that identifies Cascade persistent disk"
164
-+     },
165
-+     "fsType": {
166
-+      "type": "string",
167
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
168
-+     }
169
-+    }
170
-+   },
171
-    "v1.ProjectedVolumeSource": {
172
-     "id": "v1.ProjectedVolumeSource",
173
-     "description": "Represents a projected volume source",
174
-diff --git a/api/swagger-spec/batch_v1.json b/api/swagger-spec/batch_v1.json
175
-index 3f4abc9..2ed4018 100644
176
-+++ b/api/swagger-spec/batch_v1.json
177
-@@ -1830,6 +1830,10 @@
178
-       "$ref": "v1.PhotonPersistentDiskVolumeSource",
179
-       "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
180
-      },
181
-+     "vkeDisk": {
182
-+      "$ref": "v1.CascadeDiskVolumeSource",
183
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
184
-+     },
185
-      "projected": {
186
-       "$ref": "v1.ProjectedVolumeSource",
187
-       "description": "Items for all in one resources secrets, configmaps, and downward API"
188
-@@ -2561,6 +2565,23 @@
189
-      }
190
-     }
191
-    },
192
-+   "v1.CascadeDiskVolumeSource": {
193
-+    "id": "v1.CascadeDiskVolumeSource",
194
-+    "description": "Represents a Cascade persistent disk resource.",
195
-+    "required": [
196
-+     "diskID"
197
-+    ],
198
-+    "properties": {
199
-+     "diskID": {
200
-+      "type": "string",
201
-+      "description": "ID that identifies Cascade persistent disk"
202
-+     },
203
-+     "fsType": {
204
-+      "type": "string",
205
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
206
-+     }
207
-+    }
208
-+   },
209
-    "v1.ProjectedVolumeSource": {
210
-     "id": "v1.ProjectedVolumeSource",
211
-     "description": "Represents a projected volume source",
212
-diff --git a/api/swagger-spec/batch_v1beta1.json b/api/swagger-spec/batch_v1beta1.json
213
-index 58fa752..74fcd28 100644
214
-+++ b/api/swagger-spec/batch_v1beta1.json
215
-@@ -1885,6 +1885,10 @@
216
-       "$ref": "v1.PhotonPersistentDiskVolumeSource",
217
-       "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
218
-      },
219
-+     "vkeDisk": {
220
-+      "$ref": "v1.CascadeDiskVolumeSource",
221
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
222
-+     },
223
-      "projected": {
224
-       "$ref": "v1.ProjectedVolumeSource",
225
-       "description": "Items for all in one resources secrets, configmaps, and downward API"
226
-@@ -2616,6 +2620,23 @@
227
-      }
228
-     }
229
-    },
230
-+   "v1.CascadeDiskVolumeSource": {
231
-+    "id": "v1.CascadeDiskVolumeSource",
232
-+    "description": "Represents a Cascade persistent disk resource.",
233
-+    "required": [
234
-+     "diskID"
235
-+    ],
236
-+    "properties": {
237
-+     "diskID": {
238
-+      "type": "string",
239
-+      "description": "ID that identifies Cascade persistent disk"
240
-+     },
241
-+     "fsType": {
242
-+      "type": "string",
243
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
244
-+     }
245
-+    }
246
-+   },
247
-    "v1.ProjectedVolumeSource": {
248
-     "id": "v1.ProjectedVolumeSource",
249
-     "description": "Represents a projected volume source",
250
-diff --git a/api/swagger-spec/batch_v2alpha1.json b/api/swagger-spec/batch_v2alpha1.json
251
-index 050235b..3484e13 100644
252
-+++ b/api/swagger-spec/batch_v2alpha1.json
253
-@@ -1900,6 +1900,10 @@
254
-      "storageos": {
255
-       "$ref": "v1.StorageOSVolumeSource",
256
-       "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes."
257
-+     },
258
-+     "vkeDisk": {
259
-+      "$ref": "v1.CascadeDiskVolumeSource",
260
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
261
-      }
262
-     }
263
-    },
264
-@@ -2834,6 +2838,23 @@
265
-      }
266
-     }
267
-    },
268
-+   "v1.CascadeDiskVolumeSource": {
269
-+    "id": "v1.CascadeDiskVolumeSource",
270
-+    "description": "Represents a Cascade persistent disk resource.",
271
-+    "required": [
272
-+     "diskID"
273
-+    ],
274
-+    "properties": {
275
-+     "diskID": {
276
-+      "type": "string",
277
-+      "description": "ID that identifies Cascade persistent disk"
278
-+     },
279
-+     "fsType": {
280
-+      "type": "string",
281
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
282
-+     }
283
-+    }
284
-+   },
285
-    "v1.Container": {
286
-     "id": "v1.Container",
287
-     "description": "A single application container that you want to run within a pod.",
288
-diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json
289
-index 07c832d..26d2578 100644
290
-+++ b/api/swagger-spec/extensions_v1beta1.json
291
-@@ -7513,6 +7513,10 @@
292
-      "storageos": {
293
-       "$ref": "v1.StorageOSVolumeSource",
294
-       "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes."
295
-+     },
296
-+     "vkeDisk": {
297
-+      "$ref": "v1.CascadeDiskVolumeSource",
298
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
299
-      }
300
-     }
301
-    },
302
-@@ -8229,6 +8233,23 @@
303
-      }
304
-     }
305
-    },
306
-+   "v1.CascadeDiskVolumeSource": {
307
-+    "id": "v1.CascadeDiskVolumeSource",
308
-+    "description": "Represents a Cascade persistent disk resource.",
309
-+    "required": [
310
-+     "diskID"
311
-+    ],
312
-+    "properties": {
313
-+     "diskID": {
314
-+      "type": "string",
315
-+      "description": "ID that identifies Cascade persistent disk"
316
-+     },
317
-+     "fsType": {
318
-+      "type": "string",
319
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
320
-+     }
321
-+    }
322
-+   },
323
-    "v1.ProjectedVolumeSource": {
324
-     "id": "v1.ProjectedVolumeSource",
325
-     "description": "Represents a projected volume source",
326
-diff --git a/api/swagger-spec/settings.k8s.io_v1alpha1.json b/api/swagger-spec/settings.k8s.io_v1alpha1.json
327
-index 8c9e275..90c0e0b 100644
328
-+++ b/api/swagger-spec/settings.k8s.io_v1alpha1.json
329
-@@ -1676,6 +1676,10 @@
330
-      "storageos": {
331
-       "$ref": "v1.StorageOSVolumeSource",
332
-       "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes."
333
-+     },
334
-+     "vkeDisk": {
335
-+      "$ref": "v1.CascadeDiskVolumeSource",
336
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
337
-      }
338
-     }
339
-    },
340
-@@ -2354,6 +2358,23 @@
341
-      }
342
-     }
343
-    },
344
-+   "v1.CascadeDiskVolumeSource": {
345
-+    "id": "v1.CascadeDiskVolumeSource",
346
-+    "description": "Represents a Cascade persistent disk resource.",
347
-+    "required": [
348
-+     "diskID"
349
-+    ],
350
-+    "properties": {
351
-+     "diskID": {
352
-+      "type": "string",
353
-+      "description": "ID that identifies Cascade persistent disk"
354
-+     },
355
-+     "fsType": {
356
-+      "type": "string",
357
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
358
-+     }
359
-+    }
360
-+   },
361
-    "v1.ProjectedVolumeSource": {
362
-     "id": "v1.ProjectedVolumeSource",
363
-     "description": "Represents a projected volume source",
364
-diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json
365
-index 7cfc2e9..b36450e 100644
366
-+++ b/api/swagger-spec/v1.json
367
-@@ -19360,6 +19360,10 @@
368
-       "$ref": "v1.PhotonPersistentDiskVolumeSource",
369
-       "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
370
-      },
371
-+     "vkeDisk": {
372
-+      "$ref": "v1.CascadeDiskVolumeSource",
373
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
374
-+     },
375
-      "portworxVolume": {
376
-       "$ref": "v1.PortworxVolumeSource",
377
-       "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine"
378
-@@ -19929,6 +19933,23 @@
379
-      }
380
-     }
381
-    },
382
-+   "v1.CascadeDiskVolumeSource": {
383
-+    "id": "v1.CascadeDiskVolumeSource",
384
-+    "description": "Represents a Cascade persistent disk resource.",
385
-+    "required": [
386
-+     "diskID"
387
-+    ],
388
-+    "properties": {
389
-+     "diskID": {
390
-+      "type": "string",
391
-+      "description": "ID that identifies Cascade persistent disk"
392
-+     },
393
-+     "fsType": {
394
-+      "type": "string",
395
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
396
-+     }
397
-+    }
398
-+   },
399
-    "v1.PortworxVolumeSource": {
400
-     "id": "v1.PortworxVolumeSource",
401
-     "description": "PortworxVolumeSource represents a Portworx volume resource.",
402
-@@ -20488,6 +20509,10 @@
403
-      "storageos": {
404
-       "$ref": "v1.StorageOSVolumeSource",
405
-       "description": "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes."
406
-+     },
407
-+     "vkeDisk": {
408
-+      "$ref": "v1.CascadeDiskVolumeSource",
409
-+      "description": "vkeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine"
410
-      }
411
-     }
412
-    },
413
-diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD
414
-index 64c82a7..0a9bd71 100644
415
-+++ b/cmd/kube-controller-manager/app/BUILD
416
-@@ -86,6 +86,7 @@ go_library(
417
-         "//pkg/volume/aws_ebs:go_default_library",
418
-         "//pkg/volume/azure_dd:go_default_library",
419
-         "//pkg/volume/azure_file:go_default_library",
420
-+        "//pkg/volume/cascade_disk:go_default_library",
421
-         "//pkg/volume/cinder:go_default_library",
422
-         "//pkg/volume/csi:go_default_library",
423
-         "//pkg/volume/fc:go_default_library",
424
-diff --git a/cmd/kube-controller-manager/app/plugins.go b/cmd/kube-controller-manager/app/plugins.go
425
-index 42034d5..e729785 100644
426
-+++ b/cmd/kube-controller-manager/app/plugins.go
427
-@@ -34,6 +34,7 @@ import (
428
- 	"k8s.io/kubernetes/pkg/volume/aws_ebs"
429
- 	"k8s.io/kubernetes/pkg/volume/azure_dd"
430
- 	"k8s.io/kubernetes/pkg/volume/azure_file"
431
-+	"k8s.io/kubernetes/pkg/volume/cascade_disk"
432
- 	"k8s.io/kubernetes/pkg/volume/cinder"
433
- 	"k8s.io/kubernetes/pkg/volume/csi"
434
- 	"k8s.io/kubernetes/pkg/volume/fc"
435
-@@ -77,6 +78,7 @@ func ProbeAttachableVolumePlugins() []volume.VolumePlugin {
436
- 	allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...)
437
- 	allPlugins = append(allPlugins, iscsi.ProbeVolumePlugins()...)
438
- 	allPlugins = append(allPlugins, rbd.ProbeVolumePlugins()...)
439
-+	allPlugins = append(allPlugins, cascade_disk.ProbeVolumePlugins()...)
440
- 	if utilfeature.DefaultFeatureGate.Enabled(features.CSIPersistentVolume) {
441
- 		allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...)
442
- 	}
443
-@@ -107,6 +109,7 @@ func ProbeExpandableVolumePlugins(config componentconfig.VolumeConfiguration) []
444
- 	allPlugins = append(allPlugins, scaleio.ProbeVolumePlugins()...)
445
- 	allPlugins = append(allPlugins, storageos.ProbeVolumePlugins()...)
446
- 	allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...)
447
-+	allPlugins = append(allPlugins, cascade_disk.ProbeVolumePlugins()...)
448
- 	return allPlugins
449
- }
450
- 
451
-@@ -163,6 +166,7 @@ func ProbeControllerVolumePlugins(cloud cloudprovider.Interface, config componen
452
- 	allPlugins = append(allPlugins, vsphere_volume.ProbeVolumePlugins()...)
453
- 	allPlugins = append(allPlugins, azure_dd.ProbeVolumePlugins()...)
454
- 	allPlugins = append(allPlugins, photon_pd.ProbeVolumePlugins()...)
455
-+	allPlugins = append(allPlugins, cascade_disk.ProbeVolumePlugins()...)
456
- 
457
- 	return allPlugins
458
- }
459
-diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD
460
-index b2f3efb..278970c 100644
461
-+++ b/cmd/kubelet/app/BUILD
462
-@@ -119,6 +119,7 @@ go_library(
463
-         "//pkg/volume/aws_ebs:go_default_library",
464
-         "//pkg/volume/azure_dd:go_default_library",
465
-         "//pkg/volume/azure_file:go_default_library",
466
-+        "//pkg/volume/cascade_disk:go_default_library",
467
-         "//pkg/volume/cephfs:go_default_library",
468
-         "//pkg/volume/cinder:go_default_library",
469
-         "//pkg/volume/configmap:go_default_library",
470
-diff --git a/cmd/kubelet/app/plugins.go b/cmd/kubelet/app/plugins.go
471
-index 22700b0..540e501 100644
472
-+++ b/cmd/kubelet/app/plugins.go
473
-@@ -32,6 +32,7 @@ import (
474
- 	"k8s.io/kubernetes/pkg/volume/aws_ebs"
475
- 	"k8s.io/kubernetes/pkg/volume/azure_dd"
476
- 	"k8s.io/kubernetes/pkg/volume/azure_file"
477
-+	"k8s.io/kubernetes/pkg/volume/cascade_disk"
478
- 	"k8s.io/kubernetes/pkg/volume/cephfs"
479
- 	"k8s.io/kubernetes/pkg/volume/cinder"
480
- 	"k8s.io/kubernetes/pkg/volume/configmap"
481
-@@ -100,6 +101,7 @@ func ProbeVolumePlugins() []volume.VolumePlugin {
482
- 	allPlugins = append(allPlugins, scaleio.ProbeVolumePlugins()...)
483
- 	allPlugins = append(allPlugins, local.ProbeVolumePlugins()...)
484
- 	allPlugins = append(allPlugins, storageos.ProbeVolumePlugins()...)
485
-+	allPlugins = append(allPlugins, cascade_disk.ProbeVolumePlugins()...)
486
- 	if utilfeature.DefaultFeatureGate.Enabled(features.CSIPersistentVolume) {
487
- 		allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...)
488
- 	}
489
-diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go
490
-index 1669edc..60ba08e 100644
491
-+++ b/pkg/apis/core/types.go
492
-@@ -152,6 +152,8 @@ type VolumeSource struct {
493
- 	// StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod
494
- 	// +optional
495
- 	StorageOS *StorageOSVolumeSource
496
-+	// CascadeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine
497
-+	CascadeDisk *CascadeDiskVolumeSource
498
- }
499
- 
500
- // Similar to VolumeSource but meant for the administrator who creates PVs.
501
-@@ -230,6 +232,8 @@ type PersistentVolumeSource struct {
502
- 	// CSI (Container Storage Interface) represents storage that handled by an external CSI driver (Beta feature).
503
- 	// +optional
504
- 	CSI *CSIPersistentVolumeSource
505
-+	// CascadeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine
506
-+	CascadeDisk *CascadeDiskVolumeSource
507
- }
508
- 
509
- type PersistentVolumeClaimVolumeSource struct {
510
-@@ -1372,6 +1376,16 @@ type StorageOSPersistentVolumeSource struct {
511
- 	SecretRef *ObjectReference
512
- }
513
- 
514
-+// Represents a Cascade persistent disk resource.
515
-+type CascadeDiskVolumeSource struct {
516
-+	// ID that identifies Cascade persistent disk
517
-+	DiskID string
518
-+	// Filesystem type to mount.
519
-+	// Must be a filesystem type supported by the host operating system.
520
-+	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
521
-+	FSType string
522
-+}
523
-+
524
- // Adapts a ConfigMap into a volume.
525
- //
526
- // The contents of the target ConfigMap's Data field will be presented in a
527
-diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go
528
-index 7050c60..cf15bb7 100644
529
-+++ b/pkg/apis/core/validation/validation.go
530
-@@ -638,6 +638,14 @@ func validateVolumeSource(source *core.VolumeSource, fldPath *field.Path, volNam
531
- 			allErrs = append(allErrs, validateScaleIOVolumeSource(source.ScaleIO, fldPath.Child("scaleIO"))...)
532
- 		}
533
- 	}
534
-+	if source.CascadeDisk != nil {
535
-+		if numVolumes > 0 {
536
-+			allErrs = append(allErrs, field.Forbidden(fldPath.Child("cascadeDisk"), "may not specify more than 1 volume type"))
537
-+		} else {
538
-+			numVolumes++
539
-+			allErrs = append(allErrs, validateCascadeDiskVolumeSource(source.CascadeDisk, fldPath.Child("cascadeDisk"))...)
540
-+		}
541
-+	}
542
- 
543
- 	if numVolumes == 0 {
544
- 		allErrs = append(allErrs, field.Required(fldPath, "must specify a volume type"))
545
-@@ -1491,6 +1499,14 @@ func validateCSIPersistentVolumeSource(csi *core.CSIPersistentVolumeSource, fldP
546
- 	return allErrs
547
- }
548
- 
549
-+func validateCascadeDiskVolumeSource(cd *core.CascadeDiskVolumeSource, fldPath *field.Path) field.ErrorList {
550
-+	allErrs := field.ErrorList{}
551
-+	if len(cd.DiskID) == 0 {
552
-+		allErrs = append(allErrs, field.Required(fldPath.Child("diskID"), ""))
553
-+	}
554
-+	return allErrs
555
-+}
556
-+
557
- // ValidatePersistentVolumeName checks that a name is appropriate for a
558
- // PersistentVolumeName object.
559
- var ValidatePersistentVolumeName = NameIsDNSSubdomain
560
-@@ -1725,6 +1741,15 @@ func ValidatePersistentVolume(pv *core.PersistentVolume) field.ErrorList {
561
- 		}
562
- 	}
563
- 
564
-+	if pv.Spec.CascadeDisk != nil {
565
-+		if numVolumes > 0 {
566
-+			allErrs = append(allErrs, field.Forbidden(specPath.Child("cascadeDisk"), "may not specify more than 1 volume type"))
567
-+		} else {
568
-+			numVolumes++
569
-+			allErrs = append(allErrs, validateCascadeDiskVolumeSource(pv.Spec.CascadeDisk, specPath.Child("cascadeDisk"))...)
570
-+		}
571
-+	}
572
-+
573
- 	if numVolumes == 0 {
574
- 		allErrs = append(allErrs, field.Required(specPath, "must specify a volume type"))
575
- 	}
576
-diff --git a/pkg/apis/policy/types.go b/pkg/apis/policy/types.go
577
-index 298fcd0..174d0fc 100644
578
-+++ b/pkg/apis/policy/types.go
579
-@@ -290,6 +290,7 @@ var (
580
- 	PortworxVolume        FSType = "portworxVolume"
581
- 	ScaleIO               FSType = "scaleIO"
582
- 	CSI                   FSType = "csi"
583
-+	CascadeDisk           FSType = "cascadeDisk"
584
- 	All                   FSType = "*"
585
- )
586
- 
587
-diff --git a/pkg/cloudprovider/providers/BUILD b/pkg/cloudprovider/providers/BUILD
588
-index aeccfa1..4313576 100644
589
-+++ b/pkg/cloudprovider/providers/BUILD
590
-@@ -12,6 +12,7 @@ go_library(
591
-     deps = [
592
-         "//pkg/cloudprovider/providers/aws:go_default_library",
593
-         "//pkg/cloudprovider/providers/azure:go_default_library",
594
-+        "//pkg/cloudprovider/providers/cascade:go_default_library",
595
-         "//pkg/cloudprovider/providers/cloudstack:go_default_library",
596
-         "//pkg/cloudprovider/providers/gce:go_default_library",
597
-         "//pkg/cloudprovider/providers/openstack:go_default_library",
598
-@@ -34,6 +35,7 @@ filegroup(
599
-         ":package-srcs",
600
-         "//pkg/cloudprovider/providers/aws:all-srcs",
601
-         "//pkg/cloudprovider/providers/azure:all-srcs",
602
-+        "//pkg/cloudprovider/providers/cascade:all-srcs",
603
-         "//pkg/cloudprovider/providers/cloudstack:all-srcs",
604
-         "//pkg/cloudprovider/providers/fake:all-srcs",
605
-         "//pkg/cloudprovider/providers/gce:all-srcs",
606
-diff --git a/pkg/cloudprovider/providers/cascade/BUILD b/pkg/cloudprovider/providers/cascade/BUILD
607
-new file mode 100644
608
-index 0000000..4089166
609
-+++ b/pkg/cloudprovider/providers/cascade/BUILD
610
-@@ -0,0 +1,56 @@
611
-+package(default_visibility = ["//visibility:public"])
612
-+
613
-+load(
614
-+    "@io_bazel_rules_go//go:def.bzl",
615
-+    "go_library",
616
-+)
617
-+
618
-+go_library(
619
-+    name = "go_default_library",
620
-+    srcs = [
621
-+        "apitypes.go",
622
-+        "auth.go",
623
-+        "cascade.go",
624
-+        "cascade_disks.go",
625
-+        "cascade_instances.go",
626
-+        "cascade_loadbalancer.go",
627
-+        "client.go",
628
-+        "oidcclient.go",
629
-+        "restclient.go",
630
-+        "utils.go"
631
-+        ],
632
-+    deps = [
633
-+        "//pkg/api/v1/helper:go_default_library",
634
-+        "//pkg/cloudprovider:go_default_library",
635
-+        "//pkg/controller:go_default_library",
636
-+        "//vendor/github.com/golang/glog:go_default_library",
637
-+        "//vendor/gopkg.in/gcfg.v1:go_default_library",
638
-+        "//vendor/k8s.io/api/core/v1:go_default_library",
639
-+        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
640
-+    ],
641
-+)
642
-+
643
-+go_test(
644
-+    name = "go_default_test",
645
-+    srcs = [
646
-+        "cascade_instances_test.go",
647
-+    ],
648
-+    embed = [":go_default_library"],
649
-+    deps = [
650
-+        "//vendor/k8s.io/api/core/v1:go_default_library",
651
-+        "//vendor/github.com/stretchr/testify/assert:go_default_library",
652
-+    ],
653
-+)
654
-+
655
-+filegroup(
656
-+    name = "package-srcs",
657
-+    srcs = glob(["**"]),
658
-+    tags = ["automanaged"],
659
-+    visibility = ["//visibility:private"],
660
-+)
661
-+
662
-+filegroup(
663
-+    name = "all-srcs",
664
-+    srcs = [":package-srcs"],
665
-+    tags = ["automanaged"],
666
-+)
667
-diff --git a/pkg/cloudprovider/providers/cascade/OWNERS b/pkg/cloudprovider/providers/cascade/OWNERS
668
-new file mode 100644
669
-index 0000000..70efc9d
670
-+++ b/pkg/cloudprovider/providers/cascade/OWNERS
671
-@@ -0,0 +1,3 @@
672
-+maintainers:
673
-+- ashokc
674
-+- ysheng
675
-diff --git a/pkg/cloudprovider/providers/cascade/apitypes.go b/pkg/cloudprovider/providers/cascade/apitypes.go
676
-new file mode 100644
677
-index 0000000..d437394
678
-+++ b/pkg/cloudprovider/providers/cascade/apitypes.go
679
-@@ -0,0 +1,230 @@
680
-+package cascade
681
-+
682
-+import "fmt"
683
-+
684
-+const (
685
-+	NotFoundError     = 1408
686
-+	VMNotFoundError   = 2006
687
-+	DiskNotFoundError = 3011
688
-+	DiskInUseError    = 3012
689
-+
690
-+	DiskStateAttached = "ATTACHED"
691
-+)
692
-+
693
-+// Represents APIError returned by the API in case of an error.
694
-+type APIError struct {
695
-+	Code           *string           `json:"code"`
696
-+	Data           map[string]string `json:"data"`
697
-+	ErrorCode      int32             `json:"errorCode,omitempty"`
698
-+	Message        *string           `json:"message"`
699
-+	HttpStatusCode int               `json:"-"` // Not part of API contract
700
-+}
701
-+
702
-+// Implement Go error interface for ApiError.
703
-+func (e APIError) Error() string {
704
-+	return fmt.Sprintf(
705
-+		"Cascade: { HTTP status: '%d', code: '%s', message: '%s', data: '%v', errorcode: '%d' }",
706
-+		e.HttpStatusCode, StringVal(e.Code), StringVal(e.Message), e.Data, e.ErrorCode)
707
-+}
708
-+
709
-+// Used to represent a generic HTTP error, i.e. an unexpected HTTP 500.
710
-+type HttpError struct {
711
-+	StatusCode int
712
-+	Message    string
713
-+}
714
-+
715
-+// Implementation of error interface for HttpError.
716
-+func (e HttpError) Error() string {
717
-+	return fmt.Sprintf("Cascade: HTTP %d: %v", e.StatusCode, e.Message)
718
-+}
719
-+
720
-+// Represents a task which gets returned for long running API calls.
721
-+type Task struct {
722
-+	EndTime            int64       `json:"endTime,omitempty"`
723
-+	Entity             *Entity     `json:"entity,omitempty"`
724
-+	ID                 *string     `json:"id"`
725
-+	Operation          string      `json:"operation,omitempty"`
726
-+	QueuedTime         *int64      `json:"queuedTime"`
727
-+	ResourceProperties interface{} `json:"resourceProperties,omitempty"`
728
-+	SelfLink           string      `json:"selfLink,omitempty"`
729
-+	StartedTime        *int64      `json:"startedTime"`
730
-+	State              *string     `json:"state"`
731
-+	Steps              []*Step     `json:"steps"`
732
-+}
733
-+
734
-+// Represents the entity associated with the task.
735
-+type Entity struct {
736
-+	ID   *string `json:"id"`
737
-+	Kind *string `json:"kind"`
738
-+}
739
-+
740
-+// Represents a task that has entered into an error state. Task errors can be caught and type-checked against with the
741
-+// usual Go idiom.
742
-+type TaskError struct {
743
-+	ID   string `json:"id"`
744
-+	Step Step   `json:"step,omitempty"`
745
-+}
746
-+
747
-+// Implement Go error interface for TaskError.
748
-+func (e TaskError) Error() string {
749
-+	return fmt.Sprintf("Cascade: Task '%s' is in error state: {@step==%s}", e.ID, GetStep(e.Step))
750
-+}
751
-+
752
-+// An error representing a timeout while waiting for a task to complete.
753
-+type TaskTimeoutError struct {
754
-+	ID string
755
-+}
756
-+
757
-+// Implement Go error interface for TaskTimeoutError.
758
-+func (e TaskTimeoutError) Error() string {
759
-+	return fmt.Sprintf("Cascade: Timed out waiting for task '%s'. "+
760
-+		"Task may not be in error state, examine task for full details.", e.ID)
761
-+}
762
-+
763
-+// Represents a step in a task.
764
-+type Step struct {
765
-+	EndTime     int64             `json:"endTime,omitempty"`
766
-+	Errors      []*APIError       `json:"errors"`
767
-+	Operation   string            `json:"operation,omitempty"`
768
-+	Options     map[string]string `json:"options,omitempty"`
769
-+	QueuedTime  *int64            `json:"queuedTime"`
770
-+	Sequence    int32             `json:"sequence,omitempty"`
771
-+	StartedTime *int64            `json:"startedTime"`
772
-+	State       *string           `json:"state"`
773
-+	Warnings    []*APIError       `json:"warnings"`
774
-+}
775
-+
776
-+// Implement Go error interface for Step.
777
-+func GetStep(s Step) string {
778
-+	return fmt.Sprintf("{\"operation\"=>\"%s\",\"state\"=>\"%s}", s.Operation, StringVal(s.State))
779
-+}
780
-+
781
-+// Represents the VM response returned by the API.
782
-+type VM struct {
783
-+	AttachedDisks          []*AttachedDisk  `json:"attachedDisks"`
784
-+	Cost                   []*QuotaLineItem `json:"cost"`
785
-+	Flavor                 *string          `json:"flavor"`
786
-+	FloatingIP             string           `json:"floatingIp,omitempty"`
787
-+	HighAvailableVMGroupID string           `json:"highAvailableVMGroupID,omitempty"`
788
-+	ID                     *string          `json:"id"`
789
-+	Kind                   string           `json:"kind"`
790
-+	Name                   *string          `json:"name"`
791
-+	SelfLink               string           `json:"selfLink,omitempty"`
792
-+	SourceImageID          string           `json:"sourceImageId,omitempty"`
793
-+	State                  *string          `json:"state"`
794
-+	Subnets                []string         `json:"subnets"`
795
-+	Tags                   []string         `json:"tags"`
796
-+}
797
-+
798
-+// Represents the listVMs response returned by the API.
799
-+type VMList struct {
800
-+	Items            []*VM  `json:"items"`
801
-+	NextPageLink     string `json:"nextPageLink,omitempty"`
802
-+	PreviousPageLink string `json:"previousPageLink,omitempty"`
803
-+}
804
-+
805
-+// Represents multiple VMs returned by the API.
806
-+type VMs struct {
807
-+	Items []VM `json:"items"`
808
-+}
809
-+
810
-+// Represents the disks attached to the VMs.
811
-+type AttachedDisk struct {
812
-+	BootDisk   *bool   `json:"bootDisk"`
813
-+	CapacityGb *int32  `json:"capacityGb"`
814
-+	Flavor     *string `json:"flavor"`
815
-+	ID         *string `json:"id"`
816
-+	Kind       *string `json:"kind"`
817
-+	Name       *string `json:"name"`
818
-+	State      *string `json:"state"`
819
-+}
820
-+
821
-+// Represents an attach disk operation request.
822
-+type VMDiskOperation struct {
823
-+	Arguments map[string]string `json:"arguments,omitempty"`
824
-+	DiskID    *string           `json:"diskId"`
825
-+}
826
-+
827
-+// Represents the quota line items for the VM.
828
-+type QuotaLineItem struct {
829
-+	Key   *string  `json:"key"`
830
-+	Unit  *string  `json:"unit"`
831
-+	Value *float64 `json:"value"`
832
-+}
833
-+
834
-+// Represents a persistent disk
835
-+type PersistentDisk struct {
836
-+	CapacityGB  int32            `json:"capacityGb,omitempty"`
837
-+	Cost        []*QuotaLineItem `json:"cost"`
838
-+	Datastore   string           `json:"datastore,omitempty"`
839
-+	Flavor      *string          `json:"flavor"`
840
-+	ID          *string          `json:"id"`
841
-+	Kind        string           `json:"kind"`
842
-+	Name        *string          `json:"name"`
843
-+	SelfLink    string           `json:"selfLink,omitempty"`
844
-+	State       *string          `json:"state"`
845
-+	Tags        []string         `json:"tags"`
846
-+	VM          string           `json:"vm"`
847
-+	MountDevice string           `json:"mountDevice,omitempty"`
848
-+	Zone        *string          `json:"zone"`
849
-+}
850
-+
851
-+// Represents the spec for creating a disk.
852
-+type DiskCreateSpec struct {
853
-+	Affinities []*LocalitySpec `json:"affinities"`
854
-+	CapacityGB *int32          `json:"capacityGb"`
855
-+	Flavor     *string         `json:"flavor"`
856
-+	Kind       *string         `json:"kind"`
857
-+	Name       *string         `json:"name"`
858
-+	Tags       []string        `json:"tags"`
859
-+	Zone       *string         `json:"zone"`
860
-+	Encrypted  *bool           `json:"encrypted"`
861
-+}
862
-+
863
-+// Represents the spec for specifying affinity for a disk with another entity.
864
-+type LocalitySpec struct {
865
-+	ID   *string `json:"id"`
866
-+	Kind *string `json:"kind"`
867
-+}
868
-+
869
-+// Represens the LoadBalancer response returned by the API.
870
-+type LoadBalancer struct {
871
-+	Endpoint *string `json:"endpoint"`
872
-+}
873
-+
874
-+// Represents the spec for creating a LoadBalancer.
875
-+type LoadBalancerCreateSpec struct {
876
-+	HealthCheck *LoadBalancerHealthCheck `json:"healthCheck"`
877
-+	Name        *string                  `json:"name"`
878
-+	PortMaps    []*LoadBalancerPortMap   `json:"portMaps"`
879
-+	Type        *string                  `json:"type"`
880
-+	SubDomain   *string                  `json:"subDomain"`
881
-+}
882
-+
883
-+// Represents the health check spec for a load balancer.
884
-+type LoadBalancerHealthCheck struct {
885
-+	HealthyThreshold  int64   `json:"healthyThreshold,omitempty"`
886
-+	IntervalInSeconds int64   `json:"intervalInSeconds,omitempty"`
887
-+	Path              *string `json:"path,omitempty"`
888
-+	Port              *int64  `json:"port"`
889
-+	Protocol          *string `json:"protocol"`
890
-+}
891
-+
892
-+// Represents a port mapping spec for a load balancer.
893
-+type LoadBalancerPortMap struct {
894
-+	AllowedCidrs         []*string `json:"allowedCidrs"`
895
-+	InstancePort         *int64    `json:"instancePort"`
896
-+	InstanceProtocol     *string   `json:"instanceProtocol"`
897
-+	LoadBalancerPort     *int64    `json:"loadBalancerPort"`
898
-+	LoadBalancerProtocol *string   `json:"loadBalancerProtocol"`
899
-+}
900
-+
901
-+// Represents a VM to be registered with or deregistered from the load balancer.
902
-+type LoadBalancerVM struct {
903
-+	ID *string `json:"id"`
904
-+}
905
-+
906
-+// Represents a list of VMs to be registered with or deregistered from the load balancer.
907
-+type LoadBalancerVMUpdate struct {
908
-+	VMIds []*LoadBalancerVM `json:"vmIds"`
909
-+}
910
-diff --git a/pkg/cloudprovider/providers/cascade/auth.go b/pkg/cloudprovider/providers/cascade/auth.go
911
-new file mode 100644
912
-index 0000000..fc92377
913
-+++ b/pkg/cloudprovider/providers/cascade/auth.go
914
-@@ -0,0 +1,145 @@
915
-+package cascade
916
-+
917
-+import (
918
-+	"fmt"
919
-+	"strings"
920
-+	"github.com/golang/glog"
921
-+	"os/exec"
922
-+)
923
-+
924
-+const (
925
-+	tScope = "openid offline_access rs_admin_server at_groups rs_vmdir"
926
-+
927
-+	afdCli                     = "/opt/vmware/bin/vmafd-cli"
928
-+	afdCliMachineAccountCmd    = "get-machine-account-info"
929
-+	afdCliPasswordPrefix       = "Password: "
930
-+	afdCliSeparator            = "\n"
931
-+)
932
-+
933
-+// AuthConfig contains configuration information for the authentication client.
934
-+type AuthConfig struct {
935
-+	tenantName string
936
-+	authEndpoint string
937
-+	machineAccountName string
938
-+}
939
-+
940
-+// AuthClient defines functions related to authentication.
941
-+type AuthClient struct {
942
-+	cfg *AuthConfig
943
-+}
944
-+
945
-+// NewAuthClient creates a new authentication client
946
-+func NewAuthClient(cascadeCfg *CascadeConfig) (*AuthClient, error) {
947
-+	return &AuthClient{
948
-+		cfg: &AuthConfig{
949
-+			tenantName: cascadeCfg.Global.TenantName,
950
-+			authEndpoint: cascadeCfg.Global.AuthEndpoint,
951
-+			machineAccountName: fmt.Sprintf("%s@%s", cascadeCfg.Global.DNSName, cascadeCfg.Global.DomainName),
952
-+		},
953
-+	}, nil
954
-+}
955
-+
956
-+func (c *AuthClient) GetTokensByMachineAccount() (*TokenOptions, error) {
957
-+	// Use the VMAFD CLI to get the machine account password
958
-+	cmd := exec.Command(afdCli, afdCliMachineAccountCmd)
959
-+	output, err := cmd.Output()
960
-+	if err != nil {
961
-+		glog.Errorf("Cascade Cloud Provider: Failed to get machine account credentials. Cannot create Client.")
962
-+		return nil, fmt.Errorf("Failed to get machine account credentials, err: %v", err)
963
-+	}
964
-+
965
-+	password, err := parseMachineAccountInfo(output)
966
-+	if err != nil {
967
-+		glog.Errorf("Cascade Cloud Provider: Failed to parse machine account credentials. Cannot create Client.")
968
-+		return nil, fmt.Errorf("Failed to parse machine account credentials, err: %v", err)
969
-+	}
970
-+
971
-+	return c.GetTokensByCredentials(c.cfg.machineAccountName, password)
972
-+}
973
-+
974
-+// GetTokensByPassword gets tokens using username and password
975
-+func (c *AuthClient) GetTokensByCredentials(username, password string) (*TokenOptions, error) {
976
-+	// Parse tenant part from username
977
-+	parts := strings.Split(username, "@")
978
-+	if len(parts) != 2 {
979
-+		return nil, fmt.Errorf("Invalid full user name '%s': expected user@tenant", username)
980
-+	}
981
-+	tenant := parts[1]
982
-+
983
-+	oidcClient, err := buildOIDCClient(c.cfg.authEndpoint)
984
-+	if err != nil {
985
-+		return nil, err
986
-+	}
987
-+
988
-+	tokenResponse, err := oidcClient.GetTokenByPasswordGrant(tenant, username, password)
989
-+	if err != nil {
990
-+		return nil, err
991
-+	}
992
-+
993
-+	return toTokenOptions(tokenResponse), nil
994
-+}
995
-+
996
-+// GetTokensByRefreshToken gets tokens using refresh token
997
-+func (c *AuthClient) GetTokensByRefreshToken(refreshtoken string) (*TokenOptions, error) {
998
-+	oidcClient, err := buildOIDCClient(c.cfg.authEndpoint)
999
-+	if err != nil {
1000
-+		return nil, err
1001
-+	}
1002
-+
1003
-+	tokenResponse, err := oidcClient.GetTokenByRefreshTokenGrant(c.cfg.tenantName, refreshtoken)
1004
-+	if err != nil {
1005
-+		return nil, err
1006
-+	}
1007
-+
1008
-+	return toTokenOptions(tokenResponse), nil
1009
-+}
1010
-+
1011
-+func buildOIDCClient(authEndpoint string) (*OIDCClient, error) {
1012
-+	options := &OIDCClientOptions{
1013
-+		IgnoreCertificate: false,
1014
-+		RootCAs:           nil,
1015
-+		TokenScope:        tScope,
1016
-+	}
1017
-+
1018
-+	return NewOIDCClient(authEndpoint, options, nil), nil
1019
-+}
1020
-+
1021
-+func toTokenOptions(response *OIDCTokenResponse) *TokenOptions {
1022
-+	return &TokenOptions{
1023
-+		AccessToken:  response.AccessToken,
1024
-+		ExpiresIn:    response.ExpiresIn,
1025
-+		RefreshToken: response.RefreshToken,
1026
-+		IDToken:      response.IDToken,
1027
-+		TokenType:    response.TokenType,
1028
-+	}
1029
-+}
1030
-+
1031
-+// parseMachineAccountInfo parses the machine account password from the machine-account-info output which looks like
1032
-+// this:
1033
-+//MachineAccount: photon-8rwdscr1.lw-testdom.com
1034
-+//Password: FT`])}]d/3\EPwRpz9k1
1035
-+func parseMachineAccountInfo(output []byte) (string, error) {
1036
-+	if len(output) <= 0 {
1037
-+		return "", fmt.Errorf("account info is not specified")
1038
-+	}
1039
-+
1040
-+	strOut := string(output)
1041
-+	strOutLen := len(strOut)
1042
-+
1043
-+	pwdStart := strings.Index(strOut, afdCliPasswordPrefix)
1044
-+	if pwdStart < 0 {
1045
-+		return "", fmt.Errorf("account info is not in expected format")
1046
-+	}
1047
-+	pwdStart = pwdStart + len(afdCliPasswordPrefix)
1048
-+	if pwdStart >= strOutLen {
1049
-+		return "", fmt.Errorf("account info is not in expected format")
1050
-+	}
1051
-+	pwdEnd := strings.LastIndex(strOut, afdCliSeparator)
1052
-+	if pwdEnd < 0 || pwdEnd <= pwdStart || pwdEnd >= strOutLen {
1053
-+		return "", fmt.Errorf("account info is not in expected format")
1054
-+	}
1055
-+
1056
-+	pwd := strOut[pwdStart:pwdEnd]
1057
-+
1058
-+	return pwd, nil
1059
-+}
1060
-\ No newline at end of file
1061
-diff --git a/pkg/cloudprovider/providers/cascade/cascade.go b/pkg/cloudprovider/providers/cascade/cascade.go
1062
-new file mode 100644
1063
-index 0000000..06ada64
1064
-+++ b/pkg/cloudprovider/providers/cascade/cascade.go
1065
-@@ -0,0 +1,215 @@
1066
-+// The use of Cascade cloud provider requires the kubelet, kube-apiserver, and kube-controller-manager to be started
1067
-+// with config flag: '--cloud-provider=cascade --cloud-config=[path_to_config_file]'.
1068
-+package cascade
1069
-+
1070
-+import (
1071
-+	"context"
1072
-+	"errors"
1073
-+	"fmt"
1074
-+	"github.com/golang/glog"
1075
-+	"gopkg.in/gcfg.v1"
1076
-+	"io"
1077
-+	k8stypes "k8s.io/apimachinery/pkg/types"
1078
-+	"k8s.io/kubernetes/pkg/cloudprovider"
1079
-+	"k8s.io/kubernetes/pkg/controller"
1080
-+	"os"
1081
-+	"strings"
1082
-+)
1083
-+
1084
-+const (
1085
-+	ProviderName = "vke"
1086
-+	DiskSpecKind = "persistent-disk"
1087
-+	MasterPrefix = "master"
1088
-+)
1089
-+
1090
-+// CascadeCloud is an implementation of the cloud provider interface for Cascade Controller.
1091
-+type CascadeCloud struct {
1092
-+	cfg *CascadeConfig
1093
-+	// Authentication client to get token for Cascade API calls
1094
-+	authClient *AuthClient
1095
-+	// API Client to make Cascade API calls
1096
-+	apiClient *Client
1097
-+	// local $HOSTNAME
1098
-+	localHostname string
1099
-+	// hostname from K8S, could be overridden
1100
-+	localK8sHostname string
1101
-+}
1102
-+
1103
-+// CascadeCloud represents Cascade cloud provider's configuration.
1104
-+type CascadeConfig struct {
1105
-+	Global struct {
1106
-+		// the Cascade Controller endpoint
1107
-+		CloudTarget string `gcfg:"target"`
1108
-+		// Cascade Controller tenantName name
1109
-+		TenantName string `gcfg:"tenantName"`
1110
-+		// Cascade Controller cluster ID
1111
-+		ClusterID string `gcfg:"clusterID"`
1112
-+		// Authentication server endpoint for Cascade Controller
1113
-+		AuthEndpoint string `gcfg:"authEndpoint"`
1114
-+		// Lightwave domain name for the node
1115
-+		DomainName string `gcfg:"domainName"`
1116
-+		// DNS name of the node.
1117
-+		DNSName string `gcfg:"dnsName"`
1118
-+		// Region in which the cluster is in
1119
-+		Region string `gcfg:"region"`
1120
-+		// Availability zone in which the cluster is in
1121
-+		Zone string `gcfg:"zone"`
1122
-+		// IP address of the node.
1123
-+		IPAddress string `gcfg:"ipAddress"`
1124
-+	}
1125
-+}
1126
-+
1127
-+// Disks is interface for manipulation with Cascade Controller Persistent Disks.
1128
-+type Disks interface {
1129
-+	// AttachDisk attaches given disk to given node. Current node
1130
-+	// is used when nodeName is empty string.
1131
-+	AttachDisk(diskID string, nodeName k8stypes.NodeName) (string, error)
1132
-+
1133
-+	// DetachDisk detaches given disk to given node. Current node
1134
-+	// is used when nodeName is empty string.
1135
-+	DetachDisk(diskID string, nodeName k8stypes.NodeName) error
1136
-+
1137
-+	// DiskIsAttached checks if a disk is attached to the given node.
1138
-+	DiskIsAttached(diskID string, nodeName k8stypes.NodeName) (bool, error)
1139
-+
1140
-+	// DisksAreAttached is a batch function to check if a list of disks are attached
1141
-+	// to the node with the specified NodeName.
1142
-+	DisksAreAttached(diskID []string, nodeName k8stypes.NodeName) (map[string]bool, error)
1143
-+
1144
-+	// CreateDisk creates a new PD with given properties.
1145
-+	CreateDisk(volumeOptions *VolumeOptions) (diskID string, err error)
1146
-+
1147
-+	// DeleteDisk deletes PD.
1148
-+	DeleteDisk(diskID string) error
1149
-+
1150
-+	// Get labels to apply to volume on creation.
1151
-+	GetVolumeLabels(diskID string) (map[string]string, error)
1152
-+}
1153
-+
1154
-+// VolumeOptions specifies capacity, tags, name and flavorID for a volume.
1155
-+type VolumeOptions struct {
1156
-+	CapacityGB int
1157
-+	Tags       map[string]string
1158
-+	Name       string
1159
-+	Flavor     string
1160
-+	Encrypted  bool
1161
-+}
1162
-+
1163
-+func readConfig(config io.Reader) (*CascadeConfig, error) {
1164
-+	if config == nil {
1165
-+		err := fmt.Errorf("Cascade Cloud Provider: config file is missing. Please restart with " +
1166
-+			"--cloud-provider=cascade --cloud-config=[path_to_config_file]")
1167
-+		return nil, err
1168
-+	}
1169
-+
1170
-+	var cfg CascadeConfig
1171
-+	err := gcfg.ReadInto(&cfg, config)
1172
-+	return &cfg, err
1173
-+}
1174
-+
1175
-+func init() {
1176
-+	cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
1177
-+		cfg, err := readConfig(config)
1178
-+		if err != nil {
1179
-+			glog.Errorf("Cascade Cloud Provider: failed to read in cloud provider config file. Error[%v]", err)
1180
-+			return nil, err
1181
-+		}
1182
-+		return newCascadeCloud(cfg)
1183
-+	})
1184
-+}
1185
-+
1186
-+func newCascadeCloud(cfg *CascadeConfig) (*CascadeCloud, error) {
1187
-+	if len(cfg.Global.CloudTarget) == 0 {
1188
-+		return nil, fmt.Errorf("Cascade Controller endpoint was not specified.")
1189
-+	}
1190
-+
1191
-+	// Get local hostname
1192
-+	hostname, err := os.Hostname()
1193
-+	if err != nil {
1194
-+		glog.Errorf("Cascade Cloud Provider: get hostname failed. Error[%v]", err)
1195
-+		return nil, err
1196
-+	}
1197
-+
1198
-+	cc := CascadeCloud{
1199
-+		cfg:              cfg,
1200
-+		localHostname:    hostname,
1201
-+		localK8sHostname: "",
1202
-+	}
1203
-+
1204
-+	// Instantiate the auth and API clients only on the master nodes. Kubelets running on the workers don't need them as
1205
-+	// they are used primarily for making API calls to Cascade.
1206
-+	if strings.HasPrefix(hostname, MasterPrefix) {
1207
-+		if cc.authClient, err = NewAuthClient(cfg); err != nil {
1208
-+			return nil, err
1209
-+		}
1210
-+
1211
-+		if cc.apiClient, err = NewClient(cfg, cc.authClient); err != nil {
1212
-+			return nil, err
1213
-+		}
1214
-+	}
1215
-+
1216
-+	return &cc, nil
1217
-+}
1218
-+
1219
-+// Initialize passes a Kubernetes clientBuilder interface to the cloud provider
1220
-+func (cc *CascadeCloud) Initialize(clientBuilder controller.ControllerClientBuilder) {}
1221
-+
1222
-+// Instances returns an implementation of Instances for Cascade Controller.
1223
-+func (cc *CascadeCloud) Instances() (cloudprovider.Instances, bool) {
1224
-+	return cc, true
1225
-+}
1226
-+
1227
-+func (cc *CascadeCloud) Clusters() (cloudprovider.Clusters, bool) {
1228
-+	return nil, true
1229
-+}
1230
-+
1231
-+// ProviderName returns the cloud provider ID.
1232
-+func (cc *CascadeCloud) ProviderName() string {
1233
-+	return ProviderName
1234
-+}
1235
-+
1236
-+// LoadBalancer returns an implementation of LoadBalancer for Cascade Controller.
1237
-+func (cc *CascadeCloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
1238
-+	return cc, true
1239
-+}
1240
-+
1241
-+// Zones returns an implementation of Zones for Cascade Controller.
1242
-+func (cc *CascadeCloud) Zones() (cloudprovider.Zones, bool) {
1243
-+	return cc, true
1244
-+}
1245
-+
1246
-+func (cc *CascadeCloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
1247
-+	return cloudprovider.Zone{
1248
-+		Region:        cc.cfg.Global.Region,
1249
-+		FailureDomain: cc.cfg.Global.Zone,
1250
-+	}, nil
1251
-+}
1252
-+
1253
-+// GetZoneByProviderID implements Zones.GetZoneByProviderID
1254
-+// This is particularly useful in external cloud providers where the kubelet
1255
-+// does not initialize node data.
1256
-+func (cc *CascadeCloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) {
1257
-+	return cloudprovider.Zone{}, errors.New("unimplemented")
1258
-+}
1259
-+
1260
-+// GetZoneByNodeName implements Zones.GetZoneByNodeName
1261
-+// This is particularly useful in external cloud providers where the kubelet
1262
-+// does not initialize node data.
1263
-+func (cc *CascadeCloud) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeName) (cloudprovider.Zone, error) {
1264
-+	return cloudprovider.Zone{}, errors.New("unimeplemented")
1265
-+}
1266
-+
1267
-+// Routes returns a false since the interface is not supported for Cascade controller.
1268
-+func (cc *CascadeCloud) Routes() (cloudprovider.Routes, bool) {
1269
-+	return nil, false
1270
-+}
1271
-+
1272
-+// ScrubDNS filters DNS settings for pods.
1273
-+func (cc *CascadeCloud) ScrubDNS(nameservers, searches []string) (nsOut, srchOut []string) {
1274
-+	return nameservers, searches
1275
-+}
1276
-+
1277
-+// HasClusterID returns true if the cluster has a clusterID
1278
-+func (cc *CascadeCloud) HasClusterID() bool {
1279
-+	return true
1280
-+}
1281
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_disks.go b/pkg/cloudprovider/providers/cascade/cascade_disks.go
1282
-new file mode 100644
1283
-index 0000000..a2e8ded
1284
-+++ b/pkg/cloudprovider/providers/cascade/cascade_disks.go
1285
-@@ -0,0 +1,228 @@
1286
-+package cascade
1287
-+
1288
-+import (
1289
-+	"context"
1290
-+	"github.com/golang/glog"
1291
-+	k8stypes "k8s.io/apimachinery/pkg/types"
1292
-+	"k8s.io/apimachinery/pkg/util/sets"
1293
-+	"k8s.io/kubernetes/pkg/kubelet/apis"
1294
-+	"k8s.io/kubernetes/pkg/volume"
1295
-+	volumeutil "k8s.io/kubernetes/pkg/volume/util"
1296
-+)
1297
-+
1298
-+// Attaches given virtual disk volume to the node running kubelet.
1299
-+func (cc *CascadeCloud) AttachDisk(diskID string, nodeName k8stypes.NodeName) (string, error) {
1300
-+	// Check if disk is already attached to that node.
1301
-+	attached, err := cc.DiskIsAttached(diskID, nodeName)
1302
-+	if err != nil {
1303
-+		glog.Errorf("Cascade Cloud Provider: cc.DiskIsAttached failed during AttachDisk. Error[%v]", err)
1304
-+		return "", err
1305
-+	}
1306
-+
1307
-+	// If not already attached, attach the disk.
1308
-+	if !attached {
1309
-+		operation := &VMDiskOperation{
1310
-+			DiskID: StringPtr(diskID),
1311
-+		}
1312
-+
1313
-+		vmID, err := cc.InstanceID(context.TODO(), nodeName)
1314
-+		if err != nil {
1315
-+			glog.Errorf("Cascade Cloud Provider: cc.InstanceID failed for AttachDisk. Error[%v]", err)
1316
-+			return "", err
1317
-+		}
1318
-+
1319
-+		task, err := cc.apiClient.AttachDisk(vmID, operation)
1320
-+		if err != nil {
1321
-+			glog.Errorf("Cascade Cloud Provider: Failed to attach disk with ID %s. Error[%v]", diskID, err)
1322
-+			return "", err
1323
-+		}
1324
-+
1325
-+		_, err = cc.apiClient.WaitForTask(StringVal(task.ID))
1326
-+		if err != nil {
1327
-+			glog.Errorf("Cascade Cloud Provider: Failed to wait for task to attach disk with ID %s. Error[%v]",
1328
-+				diskID, err)
1329
-+			return "", err
1330
-+		}
1331
-+	}
1332
-+
1333
-+	// Get mount device of the attached disk.
1334
-+	disk, err := cc.apiClient.GetDisk(diskID)
1335
-+	if err != nil {
1336
-+		glog.Errorf("Cascade Cloud Provider: Failed to Get disk with diskID %s. Error[%v]", diskID, err)
1337
-+		return "", err
1338
-+	}
1339
-+
1340
-+	return disk.MountDevice, nil
1341
-+}
1342
-+
1343
-+// Detaches given virtual disk volume from the node running kubelet.
1344
-+func (cc *CascadeCloud) DetachDisk(diskID string, nodeName k8stypes.NodeName) error {
1345
-+	operation := &VMDiskOperation{
1346
-+		DiskID: StringPtr(diskID),
1347
-+	}
1348
-+
1349
-+	vmID, err := cc.InstanceID(context.TODO(), nodeName)
1350
-+	if err != nil {
1351
-+		glog.Errorf("Cascade Cloud Provider: cc.InstanceID failed for DetachDisk. Error[%v]", err)
1352
-+		return err
1353
-+	}
1354
-+
1355
-+	task, err := cc.apiClient.DetachDisk(vmID, operation)
1356
-+	if err != nil {
1357
-+		glog.Errorf("Cascade Cloud Provider: Failed to detach disk with pdID %s. Error[%v]", diskID, err)
1358
-+		return err
1359
-+	}
1360
-+
1361
-+	_, err = cc.apiClient.WaitForTask(StringVal(task.ID))
1362
-+	if err != nil {
1363
-+		glog.Errorf("Cascade Cloud Provider: Failed to wait for task to detach disk with pdID %s. Error[%v]",
1364
-+			diskID, err)
1365
-+		return err
1366
-+	}
1367
-+
1368
-+	return nil
1369
-+}
1370
-+
1371
-+// DiskIsAttached returns if disk is attached to the VM using controllers supported by the plugin.
1372
-+func (cc *CascadeCloud) DiskIsAttached(diskID string, nodeName k8stypes.NodeName) (bool, error) {
1373
-+	vmID, err := cc.InstanceID(context.TODO(), nodeName)
1374
-+	if err != nil {
1375
-+		glog.Errorf("Cascade Cloud Provider: cc.InstanceID failed for DiskIsAttached. Error[%v]", err)
1376
-+		return false, err
1377
-+	}
1378
-+
1379
-+	_, err = cc.apiClient.GetVM(vmID)
1380
-+	if err != nil {
1381
-+		switch err.(type) {
1382
-+		case APIError:
1383
-+			if err.(APIError).ErrorCode == VMNotFoundError {
1384
-+				// If instance no longer exists, we will assume that the volume is not attached.
1385
-+				glog.Warningf("Cascade Cloud Provider: Instance %s does not exist. DiskIsAttached will assume"+
1386
-+					" disk %s is not attached to it.", nodeName, diskID)
1387
-+				return false, nil
1388
-+			}
1389
-+		}
1390
-+		return false, err
1391
-+	}
1392
-+
1393
-+	disk, err := cc.apiClient.GetDisk(diskID)
1394
-+	if err != nil {
1395
-+		glog.Errorf("Cascade Cloud Provider: Failed to Get disk with diskID %s. Error[%v]", diskID, err)
1396
-+		return false, err
1397
-+	}
1398
-+
1399
-+	if disk.VM == vmID && StringVal(disk.State) == DiskStateAttached {
1400
-+		return true, nil
1401
-+	}
1402
-+
1403
-+	return false, nil
1404
-+}
1405
-+
1406
-+// DisksAreAttached returns if disks are attached to the VM using controllers supported by the plugin.
1407
-+func (cc *CascadeCloud) DisksAreAttached(diskIDs []string, nodeName k8stypes.NodeName) (map[string]bool, error) {
1408
-+	attached := make(map[string]bool)
1409
-+	for _, diskID := range diskIDs {
1410
-+		attached[diskID] = false
1411
-+	}
1412
-+
1413
-+	vmID, err := cc.InstanceID(context.TODO(), nodeName)
1414
-+	if err != nil {
1415
-+		glog.Errorf("Cascade Cloud Provider: cc.InstanceID failed for DiskIsAttached. Error[%v]", err)
1416
-+		return attached, err
1417
-+	}
1418
-+
1419
-+	for _, diskID := range diskIDs {
1420
-+		disk, err := cc.apiClient.GetDisk(diskID)
1421
-+		if err != nil {
1422
-+			glog.Warningf("Cascade Cloud Provider: failed to get VMs for persistent disk %s, err [%v]",
1423
-+				diskID, err)
1424
-+		} else {
1425
-+			if disk.VM == vmID && StringVal(disk.State) == DiskStateAttached {
1426
-+				attached[diskID] = true
1427
-+			}
1428
-+		}
1429
-+	}
1430
-+
1431
-+	return attached, nil
1432
-+}
1433
-+
1434
-+// Create a volume of given size (in GB).
1435
-+func (cc *CascadeCloud) CreateDisk(volumeOptions *VolumeOptions) (diskID string, err error) {
1436
-+	// Get Zones for the cluster
1437
-+	zones, err := cc.apiClient.GetZones()
1438
-+	if err != nil {
1439
-+		glog.Errorf("Cascade Cloud Provider: Failed to Get zones for the cluster. Error[%v]", err)
1440
-+		return "", err
1441
-+	}
1442
-+
1443
-+	// Pick a zone to place the disk in.
1444
-+	zoneSet := sets.NewString()
1445
-+	for _, zone := range zones {
1446
-+		zoneSet.Insert(zone)
1447
-+	}
1448
-+	zone := volumeutil.ChooseZoneForVolume(zoneSet, volumeOptions.Name)
1449
-+
1450
-+	diskSpec := DiskCreateSpec{}
1451
-+	diskSpec.Name = StringPtr(volumeOptions.Name)
1452
-+	diskSpec.Flavor = StringPtr(volumeOptions.Flavor)
1453
-+	diskSpec.CapacityGB = Int32Ptr(int32(volumeOptions.CapacityGB))
1454
-+	diskSpec.Kind = StringPtr(DiskSpecKind)
1455
-+	diskSpec.Zone = StringPtr(zone)
1456
-+	diskSpec.Encrypted = BoolPtr(volumeOptions.Encrypted)
1457
-+
1458
-+	task, err := cc.apiClient.CreateDisk(&diskSpec)
1459
-+	if err != nil {
1460
-+		glog.Errorf("Cascade Cloud Provider: Failed to CreateDisk. Error[%v]", err)
1461
-+		return "", err
1462
-+	}
1463
-+
1464
-+	waitTask, err := cc.apiClient.WaitForTask(StringVal(task.ID))
1465
-+	if err != nil {
1466
-+		glog.Errorf("Cascade Cloud Provider: Failed to wait for task to CreateDisk. Error[%v]", err)
1467
-+		return "", err
1468
-+	}
1469
-+
1470
-+	return StringVal(waitTask.Entity.ID), nil
1471
-+}
1472
-+
1473
-+// Deletes a volume given volume name.
1474
-+func (cc *CascadeCloud) DeleteDisk(diskID string) error {
1475
-+	task, err := cc.apiClient.DeleteDisk(diskID)
1476
-+	if err != nil {
1477
-+		glog.Errorf("Cascade Cloud Provider: Failed to DeleteDisk. Error[%v]", err)
1478
-+		// If we get a DiskNotFound error, we assume that the disk is already deleted. So we don't return an error here.
1479
-+		switch err.(type) {
1480
-+		case APIError:
1481
-+			if err.(APIError).ErrorCode == DiskNotFoundError {
1482
-+				return nil
1483
-+			}
1484
-+			if err.(APIError).ErrorCode == DiskInUseError {
1485
-+				return volume.NewDeletedVolumeInUseError(err.Error())
1486
-+			}
1487
-+		}
1488
-+		return err
1489
-+	}
1490
-+
1491
-+	_, err = cc.apiClient.WaitForTask(StringVal(task.ID))
1492
-+	if err != nil {
1493
-+		glog.Errorf("Cascade Cloud Provider: Failed to wait for task to DeleteDisk. Error[%v]", err)
1494
-+		return err
1495
-+	}
1496
-+
1497
-+	return nil
1498
-+}
1499
-+
1500
-+// Gets the zone and region for the volume.
1501
-+func (cc *CascadeCloud) GetVolumeLabels(diskID string) (map[string]string, error) {
1502
-+	disk, err := cc.apiClient.GetDisk(diskID)
1503
-+	if err != nil {
1504
-+		glog.Errorf("Cascade Cloud Provider: Failed to GetDisk for GetVolumeLabels. Error[%v]", err)
1505
-+		return nil, err
1506
-+	}
1507
-+
1508
-+	labels := make(map[string]string)
1509
-+	labels[apis.LabelZoneFailureDomain] = StringVal(disk.Zone)
1510
-+	labels[apis.LabelZoneRegion] = cc.cfg.Global.Region
1511
-+
1512
-+	return labels, nil
1513
-+}
1514
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_instances.go b/pkg/cloudprovider/providers/cascade/cascade_instances.go
1515
-new file mode 100644
1516
-index 0000000..33acfc0
1517
-+++ b/pkg/cloudprovider/providers/cascade/cascade_instances.go
1518
-@@ -0,0 +1,132 @@
1519
-+package cascade
1520
-+
1521
-+import (
1522
-+	"context"
1523
-+	"errors"
1524
-+	"github.com/golang/glog"
1525
-+	"os"
1526
-+	"strings"
1527
-+
1528
-+	"k8s.io/api/core/v1"
1529
-+	k8stypes "k8s.io/apimachinery/pkg/types"
1530
-+	"k8s.io/kubernetes/pkg/cloudprovider"
1531
-+)
1532
-+
1533
-+// NodeAddresses is an implementation of Instances.NodeAddresses. In the future, private IP address, external IP, etc.
1534
-+// will be added based on need.
1535
-+func (cc *CascadeCloud) NodeAddresses(ctx context.Context, nodeName k8stypes.NodeName) ([]v1.NodeAddress, error) {
1536
-+	return []v1.NodeAddress{
1537
-+		{Type: v1.NodeInternalIP, Address: cc.cfg.Global.IPAddress},
1538
-+		{Type: v1.NodeInternalDNS, Address: cc.cfg.Global.DNSName},
1539
-+	}, nil
1540
-+}
1541
-+
1542
-+// NodeAddressesByProviderID returns the node addresses of an instances with the specified unique providerID
1543
-+// This method will not be called from the node that is requesting this ID. i.e. metadata service
1544
-+// and other local methods cannot be used here
1545
-+func (cc *CascadeCloud) NodeAddressesByProviderID(ctx context.Context, providerID string) ([]v1.NodeAddress, error) {
1546
-+	// Get the name of the VM using the ID and generate the DNS name based on the VM name.
1547
-+	vm, err := cc.apiClient.GetVM(providerID)
1548
-+	if err != nil {
1549
-+		return nil, err
1550
-+	}
1551
-+	// Get the DNS name for the master VM and replace the VM name portion with the requested VM name.
1552
-+	dnsNameParts := strings.SplitN(cc.cfg.Global.DNSName, ".", 2)
1553
-+	if len(dnsNameParts) != 2 {
1554
-+		return nil, errors.New("Cascade cloud provider: Invalid DNS name specified in the configuation. " +
1555
-+			"Cannot get NodeAddressByProviderID.")
1556
-+	}
1557
-+	dnsAddress := StringVal(vm.Name) + dnsNameParts[1]
1558
-+	addresses := []v1.NodeAddress{}
1559
-+	addresses = append(addresses, v1.NodeAddress{Type: v1.NodeInternalDNS, Address: dnsAddress})
1560
-+	return addresses, nil
1561
-+}
1562
-+
1563
-+func (cc *CascadeCloud) AddSSHKeyToAllInstances(ctx context.Context, user string, keyData []byte) error {
1564
-+	return errors.New("unimplemented")
1565
-+}
1566
-+
1567
-+// Current node name returns node name based on host name. For Cascade Kubernetes nodes, we will use host name as the
1568
-+// node name.
1569
-+func (cc *CascadeCloud) CurrentNodeName(ctx context.Context, hostname string) (k8stypes.NodeName, error) {
1570
-+	cc.localK8sHostname = hostname
1571
-+	return k8stypes.NodeName(hostname), nil
1572
-+}
1573
-+
1574
-+// ExternalID returns the cloud provider ID of the specified instance (deprecated).
1575
-+// Note: We call Cascade Controller here to check if the instance is alive or not. That check is used by Kubernetes
1576
-+// to proactively remove nodes that the cloud provider believes is no longer available. Even otherwise, Kubernetes
1577
-+// will remove those nodes eventually.
1578
-+
1579
-+func (cc *CascadeCloud) ExternalID(ctx context.Context, nodeName k8stypes.NodeName) (string, error) {
1580
-+	return getInstanceIDAndLivelinessFromNodeName(cc, nodeName)
1581
-+}
1582
-+
1583
-+// InstanceExistsByProviderID returns true if the instance with the given provider id still exists and is running.
1584
-+// If false is returned with no error, the instance will be immediately deleted by the cloud controller manager.
1585
-+func (cc *CascadeCloud) InstanceExistsByProviderID(ctx context.Context, providerID string) (bool, error) {
1586
-+	return false, errors.New("unimplemented")
1587
-+}
1588
-+
1589
-+// InstanceID returns the cloud provider ID of the specified instance.
1590
-+func (cc *CascadeCloud) InstanceID(ctx context.Context, nodeName k8stypes.NodeName) (string, error) {
1591
-+	return getInstanceIDFromNodeName(nodeName)
1592
-+}
1593
-+
1594
-+// This gets the Cascade VM ID from the Kubernetes node name.
1595
-+func getInstanceIDFromNodeName(nodeName k8stypes.NodeName) (string, error) {
1596
-+	// nodeName is of the format master-instance-id or worker-instance-id. To compute the instance ID, we need to just
1597
-+	// get the portion after master- or worker-. That is what we do below.
1598
-+	nodeParts := strings.SplitN(string(nodeName), "-", 2)
1599
-+	if len(nodeParts) != 2 {
1600
-+		return "", errors.New("Cascade cloud provider: Invalid node name. Cannot fetch instance ID.")
1601
-+	}
1602
-+	return nodeParts[1], nil
1603
-+}
1604
-+
1605
-+// This gets the Cascade VM ID and its liveliness from the Kubernetes node name.
1606
-+func getInstanceIDAndLivelinessFromNodeName(cc *CascadeCloud, nodeName k8stypes.NodeName) (string, error) {
1607
-+	instanceID, err := getInstanceIDFromNodeName(nodeName)
1608
-+	if err != nil {
1609
-+		return "", err
1610
-+	}
1611
-+	// Get local hostname. We need to do this check to make sure we call VKE controller only from master nodes
1612
-+	// because worker nodes cannot login to VKE controller.
1613
-+	hostname, err := os.Hostname()
1614
-+	if err != nil {
1615
-+		glog.Errorf("Cascade Cloud Provider: get hostname failed. Error[%v]", err)
1616
-+		return "", err
1617
-+	}
1618
-+	// Note: Kubelet running on the worker node do not need to call VKE.
1619
-+	if strings.HasPrefix(hostname, MasterPrefix) {
1620
-+		_, err := cc.apiClient.GetVM(instanceID)
1621
-+		if err != nil {
1622
-+			switch err.(type) {
1623
-+			case APIError:
1624
-+				if err.(APIError).ErrorCode == VMNotFoundError {
1625
-+					// If instance no longer exists, we will return instance not found error
1626
-+					glog.Warningf("Cascade Cloud Provider: VM %s does not exist", instanceID)
1627
-+					return "", cloudprovider.InstanceNotFound
1628
-+				}
1629
-+			}
1630
-+		}
1631
-+	}
1632
-+	return instanceID, nil
1633
-+}
1634
-+
1635
-+
1636
-+// InstanceTypeByProviderID returns the cloudprovider instance type of the node with the specified unique providerID
1637
-+// This method will not be called from the node that is requesting this ID. i.e. metadata service
1638
-+// and other local methods cannot be used here
1639
-+func (cc *CascadeCloud) InstanceTypeByProviderID(ctx context.Context, providerID string) (string, error) {
1640
-+	return "", errors.New("unimplemented")
1641
-+}
1642
-+
1643
-+func (cc *CascadeCloud) InstanceType(ctx context.Context, nodeName k8stypes.NodeName) (string, error) {
1644
-+	return "", nil
1645
-+}
1646
-+
1647
-+// InstanceShutdownByProviderID returns true if the instance is in safe state to detach volumes
1648
-+func (cc *CascadeCloud) InstanceShutdownByProviderID(ctx context.Context, providerID string) (bool, error) {
1649
-+	return false, cloudprovider.NotImplemented
1650
-+}
1651
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_instances_test.go b/pkg/cloudprovider/providers/cascade/cascade_instances_test.go
1652
-new file mode 100644
1653
-index 0000000..8fb314d
1654
-+++ b/pkg/cloudprovider/providers/cascade/cascade_instances_test.go
1655
-@@ -0,0 +1,44 @@
1656
-+package cascade
1657
-+
1658
-+import (
1659
-+	"context"
1660
-+	"strings"
1661
-+	"testing"
1662
-+
1663
-+	"github.com/stretchr/testify/assert"
1664
-+	"k8s.io/api/core/v1"
1665
-+)
1666
-+
1667
-+const configFile = `
1668
-+[Global]
1669
-+target = target
1670
-+tenantName = tenant
1671
-+clusterID = cluster-id
1672
-+authEndpoint = auth-endpoint
1673
-+domainName = domain.test
1674
-+dnsName = node.domain.test
1675
-+region = region
1676
-+zone = zone
1677
-+ipAddress = 1.1.1.1
1678
-+`
1679
-+
1680
-+func getCascadeInstance() (*CascadeCloud, error) {
1681
-+	cfg, err := readConfig(strings.NewReader(configFile))
1682
-+	return &CascadeCloud{
1683
-+		cfg:              cfg,
1684
-+		localHostname:    "hostname",
1685
-+		localK8sHostname: "",
1686
-+	}, err
1687
-+}
1688
-+
1689
-+func TestNodeAddresses(t *testing.T) {
1690
-+	cc, err := getCascadeInstance()
1691
-+	assert.Nil(t, err)
1692
-+	expectedNodeAddresses := []v1.NodeAddress{
1693
-+		{Type: v1.NodeInternalIP, Address: "1.1.1.1"},
1694
-+		{Type: v1.NodeInternalDNS, Address: "node.domain.test"},
1695
-+	}
1696
-+	actualNodeAddresses, err := cc.NodeAddresses(context.TODO(), "node")
1697
-+	assert.Nil(t, err)
1698
-+	assert.Equal(t, expectedNodeAddresses, actualNodeAddresses)
1699
-+}
1700
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go b/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go
1701
-new file mode 100644
1702
-index 0000000..6338072
1703
-+++ b/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go
1704
-@@ -0,0 +1,285 @@
1705
-+package cascade
1706
-+
1707
-+import (
1708
-+	"context"
1709
-+	"fmt"
1710
-+	"github.com/golang/glog"
1711
-+	"k8s.io/api/core/v1"
1712
-+	"k8s.io/apimachinery/pkg/types"
1713
-+	"k8s.io/kubernetes/pkg/api/v1/service"
1714
-+	"k8s.io/kubernetes/pkg/cloudprovider"
1715
-+)
1716
-+
1717
-+const TCP_PROTOCOL = "TCP"
1718
-+
1719
-+const HTTP_PROTOCOL = "HTTP"
1720
-+
1721
-+// EnsureLoadBalancer creates or updates a Cascade load balancer
1722
-+func (cc *CascadeCloud) EnsureLoadBalancer(ctx context.Context, clusterName string, k8sService *v1.Service, nodes []*v1.Node) (*v1.LoadBalancerStatus, error) {
1723
-+	logger := newLoadBalancerLogger(clusterName, k8sService, "EnsureLoadBalancer")
1724
-+
1725
-+	loadBalancerName := cloudprovider.GetLoadBalancerName(k8sService)
1726
-+	logger.Infof("Load balancer name: %s", loadBalancerName)
1727
-+
1728
-+	// Sanity checks
1729
-+	if k8sService.Spec.SessionAffinity != v1.ServiceAffinityNone {
1730
-+		logger.Errorf("Unsupported load balancer session affinity: %+v", k8sService.Spec.SessionAffinity)
1731
-+		return nil, fmt.Errorf("Unsupported load balancer session affinity: %+v", k8sService.Spec.SessionAffinity)
1732
-+	}
1733
-+
1734
-+	if len(k8sService.Spec.Ports) == 0 {
1735
-+		logger.Errorf("No port mapping is specified")
1736
-+		return nil, fmt.Errorf("No port mapping is specified")
1737
-+	}
1738
-+
1739
-+	// Create load balancer port maps
1740
-+	portMaps := []*LoadBalancerPortMap{}
1741
-+	for _, port := range k8sService.Spec.Ports {
1742
-+		if port.Protocol != v1.ProtocolTCP {
1743
-+			logger.Warningf("Ignoring port that does not use TCP protocol: %+v", port)
1744
-+			continue
1745
-+		}
1746
-+
1747
-+		if port.NodePort == 0 {
1748
-+			logger.Warningf("Ignoring port without node port defined: %+v", port)
1749
-+			continue
1750
-+		}
1751
-+
1752
-+		// TODO: For now we only support SSL pass through. All port mappings are using TCP protocol.
1753
-+		//       Also note that we allow all external traffic to access the ports.
1754
-+		portMap := &LoadBalancerPortMap{
1755
-+			InstancePort:         Int64Ptr(int64(port.NodePort)),
1756
-+			InstanceProtocol:     StringPtr(TCP_PROTOCOL),
1757
-+			LoadBalancerPort:     Int64Ptr(int64(port.Port)),
1758
-+			LoadBalancerProtocol: StringPtr(TCP_PROTOCOL),
1759
-+		}
1760
-+		portMaps = append(portMaps, portMap)
1761
-+	}
1762
-+
1763
-+	// Create load balancer health check
1764
-+	healthCheck := &LoadBalancerHealthCheck{
1765
-+		HealthyThreshold:  5,
1766
-+		IntervalInSeconds: 10,
1767
-+	}
1768
-+	if healthCheckPath, healthCheckNodePort := service.GetServiceHealthCheckPathPort(k8sService); healthCheckPath != "" {
1769
-+		logger.Infof("HTTP health checks on: %s:%d", healthCheckPath, healthCheckNodePort)
1770
-+		healthCheck.Path = StringPtr(healthCheckPath)
1771
-+		healthCheck.Port = Int64Ptr(int64(healthCheckNodePort))
1772
-+		healthCheck.Protocol = StringPtr(HTTP_PROTOCOL)
1773
-+	} else {
1774
-+		logger.Infof("TCP health check on port: %d", Int64Val(portMaps[0].InstancePort))
1775
-+		healthCheck.Port = portMaps[0].InstancePort
1776
-+		healthCheck.Protocol = StringPtr(TCP_PROTOCOL)
1777
-+	}
1778
-+
1779
-+	// Create load balancer
1780
-+	createSpec := &LoadBalancerCreateSpec{
1781
-+		Name:        StringPtr(loadBalancerName),
1782
-+		Type:        StringPtr("PUBLIC"),
1783
-+		PortMaps:    portMaps,
1784
-+		HealthCheck: healthCheck,
1785
-+		SubDomain:   StringPtr(k8sService.Name),
1786
-+	}
1787
-+	logger.Infof("Load balancer create spec: %+v", *createSpec)
1788
-+
1789
-+	task, err := cc.apiClient.CreateOrUpdateLoadBalancer(createSpec)
1790
-+	if err != nil {
1791
-+		logger.Errorf("Failed to create or update load balancer. Error: [%v]", err)
1792
-+		return nil, err
1793
-+	}
1794
-+
1795
-+	_, err = cc.apiClient.WaitForTask(StringVal(task.ID))
1796
-+	if err != nil {
1797
-+		logger.Errorf("Failed to poll task status of creating or updating load balancer. Error: [%v]", err)
1798
-+		return nil, err
1799
-+	}
1800
-+
1801
-+	// Apply VM update to load balancer
1802
-+	err = cc.updateLoadBalancerVMs(nodes, loadBalancerName, logger)
1803
-+	if err != nil {
1804
-+		// The private function already did logging. No need to log again.
1805
-+		return nil, err
1806
-+	}
1807
-+
1808
-+	// Get load balancer
1809
-+	loadBalancer, err := cc.apiClient.GetLoadBalancer(StringPtr(loadBalancerName))
1810
-+	if err != nil {
1811
-+		glog.Errorf("Failed to get load balancer. Error: [%v]", err)
1812
-+		return nil, err
1813
-+	}
1814
-+
1815
-+	return toLoadBalancerStatus(loadBalancer), nil
1816
-+}
1817
-+
1818
-+// GetLoadBalancer returns the information about a Cascade load balancer
1819
-+func (cc *CascadeCloud) GetLoadBalancer(ctx context.Context, clusterName string, k8sService *v1.Service) (*v1.LoadBalancerStatus, bool, error) {
1820
-+	logger := newLoadBalancerLogger(clusterName, k8sService, "GetLoadBalancer")
1821
-+
1822
-+	loadBalancerName := cloudprovider.GetLoadBalancerName(k8sService)
1823
-+	logger.Infof("Load balancer name: %s", loadBalancerName)
1824
-+
1825
-+	// Get load balancer
1826
-+	loadBalancer, err := cc.apiClient.GetLoadBalancer(StringPtr(loadBalancerName))
1827
-+	if err != nil {
1828
-+		logger.Errorf("Failed to get load balancer. Error: [%v]", err)
1829
-+		// Do not return error here because we want the caller of this function to determine
1830
-+		// what to do with the not-found situation.
1831
-+		switch err.(type) {
1832
-+		case APIError:
1833
-+			if err.(APIError).ErrorCode == NotFoundError {
1834
-+				return nil, false, nil
1835
-+			}
1836
-+		}
1837
-+		return nil, false, err
1838
-+	}
1839
-+
1840
-+	return toLoadBalancerStatus(loadBalancer), true, nil
1841
-+}
1842
-+
1843
-+// UpdateLoadBalancer updates the node information of a Cascade load balancer
1844
-+func (cc *CascadeCloud) UpdateLoadBalancer(ctx context.Context, clusterName string, k8sService *v1.Service, nodes []*v1.Node) error {
1845
-+	logger := newLoadBalancerLogger(clusterName, k8sService, "UpdateLoadBalancer")
1846
-+
1847
-+	loadBalancerName := cloudprovider.GetLoadBalancerName(k8sService)
1848
-+	logger.Infof("Load balancer name: %s", loadBalancerName)
1849
-+
1850
-+	err := cc.updateLoadBalancerVMs(nodes, loadBalancerName, logger)
1851
-+	if err != nil {
1852
-+		// The private function already did logging. No need to log again.
1853
-+		return err
1854
-+	}
1855
-+
1856
-+	return nil
1857
-+}
1858
-+
1859
-+// EnsureLoadBalancerDeleted deletes a Cascade load balancer
1860
-+func (cc *CascadeCloud) EnsureLoadBalancerDeleted(ctx context.Context, clusterName string, k8sService *v1.Service) error {
1861
-+	logger := newLoadBalancerLogger(clusterName, k8sService, "EnsureLoadBalancerDeleted")
1862
-+
1863
-+	loadBalancerName := cloudprovider.GetLoadBalancerName(k8sService)
1864
-+	logger.Infof("Load balancer name: %s", loadBalancerName)
1865
-+
1866
-+	task, err := cc.apiClient.DeleteLoadBalancer(StringPtr(loadBalancerName), k8sService.Name)
1867
-+	if err != nil {
1868
-+		logger.Errorf("Failed to delete load balancer. Error: [%v]", err)
1869
-+		// If we get a NotFound error, we assume that the load balancer is already deleted. So we don't return an error
1870
-+		// here.
1871
-+		switch err.(type) {
1872
-+		case APIError:
1873
-+			if err.(APIError).ErrorCode == NotFoundError {
1874
-+				return nil
1875
-+			}
1876
-+		}
1877
-+		return err
1878
-+	}
1879
-+
1880
-+	_, err = cc.apiClient.WaitForTask(StringVal(task.ID))
1881
-+	if err != nil {
1882
-+		logger.Errorf("Failed to poll task status of deleting load balancer. Error: [%v]", err)
1883
-+		return err
1884
-+	}
1885
-+
1886
-+	return nil
1887
-+}
1888
-+
1889
-+func (cc *CascadeCloud) updateLoadBalancerVMs(
1890
-+	nodes []*v1.Node, loadBalancerName string, logger *loadBalancerLogger) error {
1891
-+
1892
-+	// Apply VM update to the load balancer
1893
-+	loadBalancerVMs := make([]*LoadBalancerVM, 0)
1894
-+
1895
-+	for _, node := range nodes {
1896
-+		// If the node does not have a name, we cannot derive its instance ID. Therefore we skip this node.
1897
-+		if len(node.Name) == 0 {
1898
-+			logger.Warningf("Node %s does not have a name. Skip updating this VM for load balancer", node.UID)
1899
-+			continue
1900
-+		}
1901
-+
1902
-+		// If we cannot get the instance ID, something is wrong on the Cascade Controller side.
1903
-+		// However, we should tolerate such failure and continue the load balancer VM update
1904
-+		// by skipping this VM.
1905
-+		instanceID, err := cc.InstanceID(context.TODO(), types.NodeName(node.Name))
1906
-+		if err != nil {
1907
-+			logger.Warningf("Unable to get instance ID for node %s, skip updating this VM for load balancer. Error [%v]", node.Name, err)
1908
-+			continue
1909
-+		}
1910
-+
1911
-+		loadBalancerVMs = append(loadBalancerVMs, &LoadBalancerVM{
1912
-+			ID: StringPtr(instanceID),
1913
-+		})
1914
-+	}
1915
-+
1916
-+	if len(loadBalancerVMs) == 0 {
1917
-+		logger.Infof("No nodes to be added to the load balancer. Skip updating load balancer VMs")
1918
-+		return nil
1919
-+	}
1920
-+
1921
-+	vmUpdate := &LoadBalancerVMUpdate{
1922
-+		VMIds: loadBalancerVMs,
1923
-+	}
1924
-+	logger.Infof("Load balancer VM update spec: %+v", vmUpdate.VMIds)
1925
-+
1926
-+	task, err := cc.apiClient.ApplyVMsToLoadBalancer(StringPtr(loadBalancerName), vmUpdate)
1927
-+	if err != nil {
1928
-+		logger.Errorf("Failed to update load balancer VMs. Error: [%v]", err)
1929
-+		return err
1930
-+	}
1931
-+
1932
-+	_, err = cc.apiClient.WaitForTask(StringVal(task.ID))
1933
-+	if err != nil {
1934
-+		logger.Errorf("Failed to poll task status of updating load balancer VMs. Error: [%v]", err)
1935
-+		return err
1936
-+	}
1937
-+
1938
-+	return nil
1939
-+}
1940
-+
1941
-+func toLoadBalancerStatus(lb *LoadBalancer) *v1.LoadBalancerStatus {
1942
-+	var endpoint string
1943
-+	if lb != nil && lb.Endpoint != nil {
1944
-+		endpoint = StringVal(lb.Endpoint)
1945
-+	}
1946
-+
1947
-+	return &v1.LoadBalancerStatus{
1948
-+		Ingress: []v1.LoadBalancerIngress{
1949
-+			{
1950
-+				Hostname: endpoint,
1951
-+			},
1952
-+		},
1953
-+	}
1954
-+}
1955
-+
1956
-+type loadBalancerLogger struct {
1957
-+	clusterName string
1958
-+	k8sService  *v1.Service
1959
-+	callingFunc string
1960
-+}
1961
-+
1962
-+func newLoadBalancerLogger(clusterName string, k8sService *v1.Service, callingFunc string) *loadBalancerLogger {
1963
-+	return &loadBalancerLogger{
1964
-+		clusterName: clusterName,
1965
-+		k8sService:  k8sService,
1966
-+		callingFunc: callingFunc,
1967
-+	}
1968
-+}
1969
-+
1970
-+func (l *loadBalancerLogger) getLogMsg(
1971
-+	msgTemplate string, args ...interface{}) string {
1972
-+
1973
-+	errorMsg := fmt.Sprintf("Cascade Cloud Provider::%s::Cluster [%s] Service [%s]: %s",
1974
-+		l.callingFunc, l.clusterName, l.k8sService.Name,
1975
-+		msgTemplate)
1976
-+	return fmt.Sprintf(errorMsg, args)
1977
-+}
1978
-+
1979
-+func (l *loadBalancerLogger) Errorf(msgTemplate string, args ...interface{}) {
1980
-+	glog.Errorln(l.getLogMsg(msgTemplate, args))
1981
-+}
1982
-+
1983
-+func (l *loadBalancerLogger) Warningf(msgTemplate string, args ...interface{}) {
1984
-+	glog.Warningln(l.getLogMsg(msgTemplate, args))
1985
-+}
1986
-+
1987
-+func (l *loadBalancerLogger) Infof(msgTemplate string, args ...interface{}) {
1988
-+	glog.Infoln(l.getLogMsg(msgTemplate, args))
1989
-+}
1990
-diff --git a/pkg/cloudprovider/providers/cascade/client.go b/pkg/cloudprovider/providers/cascade/client.go
1991
-new file mode 100644
1992
-index 0000000..e4494e4
1993
-+++ b/pkg/cloudprovider/providers/cascade/client.go
1994
-@@ -0,0 +1,399 @@
1995
-+package cascade
1996
-+
1997
-+import (
1998
-+	"bytes"
1999
-+	"crypto/tls"
2000
-+	"crypto/x509"
2001
-+	"encoding/json"
2002
-+	"fmt"
2003
-+	"github.com/golang/glog"
2004
-+	"net/http"
2005
-+	"strings"
2006
-+	"time"
2007
-+)
2008
-+
2009
-+// Represents stateless context needed to call Cascade APIs.
2010
-+// Note that we are implementing the Cascade APIs manually instead of using the swagger generated code
2011
-+// because swagger uses a different version of openapi library than kubernetes. It is difficult to
2012
-+// address the version conflict to make it compile.
2013
-+type Client struct {
2014
-+	cfg        *ClientConfig
2015
-+	options    ClientOptions
2016
-+	restClient *restClient
2017
-+}
2018
-+
2019
-+type ClientConfig struct {
2020
-+	tenantName string
2021
-+	clusterID  string
2022
-+	region     string
2023
-+	endpoint   string
2024
-+}
2025
-+
2026
-+// Represents Tokens
2027
-+type TokenOptions struct {
2028
-+	AccessToken  string `json:"access_token"`
2029
-+	ExpiresIn    int    `json:"expires_in"`
2030
-+	RefreshToken string `json:"refresh_token,omitempty"`
2031
-+	IDToken      string `json:"id_token"`
2032
-+	TokenType    string `json:"token_type"`
2033
-+}
2034
-+
2035
-+type TokenCallback func(string)
2036
-+
2037
-+// Options for Client
2038
-+type ClientOptions struct {
2039
-+	// When using the Tasks.Wait APIs, defines the duration of how long
2040
-+	// we should continue to poll the server. Default is 30 minutes.
2041
-+	// TasksAPI.WaitTimeout() can be used to specify timeout on
2042
-+	// individual calls.
2043
-+	TaskPollTimeout time.Duration
2044
-+
2045
-+	// Whether or not to ignore any TLS errors when talking to Cascade,
2046
-+	// false by default.
2047
-+	IgnoreCertificate bool
2048
-+
2049
-+	// List of root CA's to use for server validation
2050
-+	// nil by default.
2051
-+	RootCAs *x509.CertPool
2052
-+
2053
-+	// For tasks APIs, defines the number of retries to make in the event
2054
-+	// of an error. Default is 3.
2055
-+	TaskRetryCount int
2056
-+
2057
-+	// Tokens for user authentication. Default is empty.
2058
-+	TokenOptions *TokenOptions
2059
-+}
2060
-+
2061
-+const minimumTaskPollDelay = 500 * time.Millisecond
2062
-+
2063
-+// Creates a new Cascade client which can be used to make API calls to Cascade.
2064
-+func NewClient(cfg *CascadeConfig, authClient *AuthClient) (c *Client, err error) {
2065
-+	tokenOptions, err := authClient.GetTokensByMachineAccount()
2066
-+	if err != nil {
2067
-+		glog.Errorf("Cascade Cloud Provider: Failed to create new client due to error: %+v", err)
2068
-+		return
2069
-+	}
2070
-+
2071
-+	options := &ClientOptions{
2072
-+		TaskPollTimeout:   30 * time.Minute,
2073
-+		TaskRetryCount:    3,
2074
-+		TokenOptions:      tokenOptions,
2075
-+		IgnoreCertificate: false,
2076
-+		RootCAs:           nil,
2077
-+	}
2078
-+
2079
-+	tr := &http.Transport{
2080
-+		TLSClientConfig: &tls.Config{
2081
-+			InsecureSkipVerify: options.IgnoreCertificate,
2082
-+			RootCAs:            options.RootCAs},
2083
-+	}
2084
-+
2085
-+	tokenCallback := func(newToken string) {
2086
-+		c.options.TokenOptions.AccessToken = newToken
2087
-+	}
2088
-+
2089
-+	restClient := &restClient{
2090
-+		authClient:                authClient,
2091
-+		httpClient:                &http.Client{Transport: tr},
2092
-+		UpdateAccessTokenCallback: tokenCallback,
2093
-+	}
2094
-+
2095
-+	clientConfig := &ClientConfig{
2096
-+		tenantName: cfg.Global.TenantName,
2097
-+		clusterID:  cfg.Global.ClusterID,
2098
-+		region:     cfg.Global.Region,
2099
-+		endpoint:   strings.TrimRight(cfg.Global.CloudTarget, "/"),
2100
-+	}
2101
-+
2102
-+	c = &Client{
2103
-+		cfg:        clientConfig,
2104
-+		restClient: restClient,
2105
-+		// Ensure a copy of options is made, rather than using a pointer
2106
-+		// which may change out from underneath if misused by the caller.
2107
-+		options: *options,
2108
-+	}
2109
-+
2110
-+	return
2111
-+}
2112
-+
2113
-+// Gets VM with the specified ID.
2114
-+func (api *Client) GetVM(vmID string) (vm *VM, err error) {
2115
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/vms/%s", api.cfg.endpoint, api.cfg.tenantName,
2116
-+		api.cfg.clusterID, vmID)
2117
-+	res, err := api.restClient.Get(uri, api.options.TokenOptions)
2118
-+	if err != nil {
2119
-+		return
2120
-+	}
2121
-+	defer res.Body.Close()
2122
-+	res, err = getError(res)
2123
-+	if err != nil {
2124
-+		return
2125
-+	}
2126
-+	vm = &VM{}
2127
-+	err = json.NewDecoder(res.Body).Decode(vm)
2128
-+	return
2129
-+}
2130
-+
2131
-+// Gets disk with the specified ID.
2132
-+func (api *Client) GetDisk(diskID string) (disk *PersistentDisk, err error) {
2133
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/disks/%s", api.cfg.endpoint, api.cfg.tenantName,
2134
-+		api.cfg.clusterID, diskID)
2135
-+	res, err := api.restClient.Get(uri, api.options.TokenOptions)
2136
-+	if err != nil {
2137
-+		return
2138
-+	}
2139
-+	defer res.Body.Close()
2140
-+	res, err = getError(res)
2141
-+	if err != nil {
2142
-+		return
2143
-+	}
2144
-+	disk = &PersistentDisk{}
2145
-+	err = json.NewDecoder(res.Body).Decode(disk)
2146
-+	return
2147
-+}
2148
-+
2149
-+// Creates a disk under the cluster.
2150
-+func (api *Client) CreateDisk(spec *DiskCreateSpec) (task *Task, err error) {
2151
-+	body, err := json.Marshal(spec)
2152
-+	if err != nil {
2153
-+		return
2154
-+	}
2155
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/disks", api.cfg.endpoint, api.cfg.tenantName,
2156
-+		api.cfg.clusterID)
2157
-+	res, err := api.restClient.Post(uri, "application/json", bytes.NewReader(body), api.options.TokenOptions)
2158
-+	if err != nil {
2159
-+		return
2160
-+	}
2161
-+	defer res.Body.Close()
2162
-+	task, err = getTask(getError(res))
2163
-+	return
2164
-+}
2165
-+
2166
-+// Deletes a disk with the specified ID.
2167
-+func (api *Client) DeleteDisk(diskID string) (task *Task, err error) {
2168
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/disks/%s", api.cfg.endpoint, api.cfg.tenantName,
2169
-+		api.cfg.clusterID, diskID)
2170
-+	res, err := api.restClient.Delete(uri, api.options.TokenOptions)
2171
-+	if err != nil {
2172
-+		return
2173
-+	}
2174
-+	defer res.Body.Close()
2175
-+	task, err = getTask(getError(res))
2176
-+	return
2177
-+}
2178
-+
2179
-+// Attaches a disk to the specified VM.
2180
-+func (api *Client) AttachDisk(vmID string, op *VMDiskOperation) (task *Task, err error) {
2181
-+	body, err := json.Marshal(op)
2182
-+	if err != nil {
2183
-+		return
2184
-+	}
2185
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/vms/%s/attach_disk", api.cfg.endpoint, api.cfg.tenantName,
2186
-+		api.cfg.clusterID, vmID)
2187
-+	res, err := api.restClient.Post(uri, "application/json", bytes.NewReader(body), api.options.TokenOptions)
2188
-+	if err != nil {
2189
-+		return
2190
-+	}
2191
-+	defer res.Body.Close()
2192
-+	task, err = getTask(getError(res))
2193
-+	return
2194
-+}
2195
-+
2196
-+// Detaches a disk from the specified VM.
2197
-+func (api *Client) DetachDisk(vmID string, op *VMDiskOperation) (task *Task, err error) {
2198
-+	body, err := json.Marshal(op)
2199
-+	if err != nil {
2200
-+		return
2201
-+	}
2202
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/vms/%s/detach_disk", api.cfg.endpoint, api.cfg.tenantName,
2203
-+		api.cfg.clusterID, vmID)
2204
-+	res, err := api.restClient.Post(uri, "application/json", bytes.NewReader(body), api.options.TokenOptions)
2205
-+	if err != nil {
2206
-+		return
2207
-+	}
2208
-+	defer res.Body.Close()
2209
-+	task, err = getTask(getError(res))
2210
-+	return
2211
-+}
2212
-+
2213
-+// Gets a task by ID.
2214
-+func (api *Client) GetTask(taskID string) (task *Task, err error) {
2215
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/tasks/%s?region=%s", api.cfg.endpoint, api.cfg.tenantName,
2216
-+		taskID, api.cfg.region)
2217
-+	res, err := api.restClient.Get(uri, api.options.TokenOptions)
2218
-+	if err != nil {
2219
-+		return
2220
-+	}
2221
-+	defer res.Body.Close()
2222
-+	result, err := getTask(getError(res))
2223
-+	return result, err
2224
-+}
2225
-+
2226
-+// Waits for a task to complete by polling the tasks API until a task returns with the state COMPLETED or ERROR.
2227
-+func (api *Client) WaitForTask(taskID string) (task *Task, err error) {
2228
-+	start := time.Now()
2229
-+	numErrors := 0
2230
-+	maxErrors := api.options.TaskRetryCount
2231
-+	backoffMultiplier := 1
2232
-+
2233
-+	for time.Since(start) < api.options.TaskPollTimeout {
2234
-+		task, err = api.GetTask(taskID)
2235
-+		if err != nil {
2236
-+			switch err.(type) {
2237
-+			// If an ApiError comes back, something is wrong, return the error to the caller
2238
-+			case APIError:
2239
-+				return
2240
-+				// For other errors, retry before giving up
2241
-+			default:
2242
-+				numErrors++
2243
-+				if numErrors > maxErrors {
2244
-+					return
2245
-+				}
2246
-+			}
2247
-+		} else {
2248
-+			// Reset the error count any time a successful call is made
2249
-+			numErrors = 0
2250
-+			if StringVal(task.State) == "COMPLETED" {
2251
-+				return
2252
-+			}
2253
-+			if StringVal(task.State) == "ERROR" {
2254
-+				err = TaskError{StringVal(task.ID), getFailedStep(task)}
2255
-+				return
2256
-+			}
2257
-+		}
2258
-+
2259
-+		// Perform backoff based on how long it has been since we started polling. The logic is as follows:
2260
-+		// For the first 10 seconds, poll every 500 milliseconds.
2261
-+		// From there till the first 1 minute, poll every 1 second.
2262
-+		// From there till the first 10 minutes, poll every 5 seconds.
2263
-+		// From there till the timeout (30 minutes), poll every 10 seconds.
2264
-+		elapsedTime := time.Since(start)
2265
-+		if elapsedTime > 10*time.Second && elapsedTime <= 60*time.Second {
2266
-+			backoffMultiplier = 2
2267
-+		} else if elapsedTime > 60*time.Second && elapsedTime <= 600*time.Second {
2268
-+			backoffMultiplier = 10
2269
-+		} else if elapsedTime > 600*time.Second && elapsedTime <= api.options.TaskPollTimeout {
2270
-+			backoffMultiplier = 20
2271
-+		}
2272
-+		time.Sleep(time.Duration(backoffMultiplier) * minimumTaskPollDelay)
2273
-+	}
2274
-+	err = TaskTimeoutError{taskID}
2275
-+	return
2276
-+}
2277
-+
2278
-+// CreateOrUpdateLoadBalancer creates a load balancer if not existed, or update one otherwise
2279
-+func (api *Client) CreateOrUpdateLoadBalancer(spec *LoadBalancerCreateSpec) (*Task, error) {
2280
-+	body, err := json.Marshal(spec)
2281
-+	if err != nil {
2282
-+		return nil, err
2283
-+	}
2284
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/loadbalancers", api.cfg.endpoint, api.cfg.tenantName,
2285
-+		api.cfg.clusterID)
2286
-+	res, err := api.restClient.Post(uri, "application/json", bytes.NewReader(body), api.options.TokenOptions)
2287
-+	if err != nil {
2288
-+		return nil, err
2289
-+	}
2290
-+	defer res.Body.Close()
2291
-+	return getTask(getError(res))
2292
-+}
2293
-+
2294
-+// GetLoadBalancer returns a load balancer by name
2295
-+func (api *Client) GetLoadBalancer(loadBalancerName *string) (*LoadBalancer, error) {
2296
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/loadbalancers/%s", api.cfg.endpoint, api.cfg.tenantName,
2297
-+		api.cfg.clusterID, StringVal(loadBalancerName))
2298
-+	res, err := api.restClient.Get(uri, api.options.TokenOptions)
2299
-+	if err != nil {
2300
-+		return nil, err
2301
-+	}
2302
-+	defer res.Body.Close()
2303
-+	res, err = getError(res)
2304
-+	if err != nil {
2305
-+		return nil, err
2306
-+	}
2307
-+	loadBalancer := &LoadBalancer{}
2308
-+	err = json.NewDecoder(res.Body).Decode(loadBalancer)
2309
-+	return loadBalancer, err
2310
-+}
2311
-+
2312
-+// DeleteLoadBalancer deletes a load balancer by name
2313
-+func (api *Client) DeleteLoadBalancer(loadBalancerName *string, subDomain string) (*Task, error) {
2314
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/loadbalancers/%s", api.cfg.endpoint, api.cfg.tenantName,
2315
-+		api.cfg.clusterID, StringVal(loadBalancerName))
2316
-+
2317
-+	if len(subDomain) > 0 {
2318
-+		uri = fmt.Sprintf(uri + "?sub-domain=%s", subDomain)
2319
-+	}
2320
-+
2321
-+	res, err := api.restClient.Delete(uri, api.options.TokenOptions)
2322
-+	if err != nil {
2323
-+		return nil, err
2324
-+	}
2325
-+	return getTask(getError(res))
2326
-+}
2327
-+
2328
-+// ApplyVMsToLoadBalancer updates the instances that are registered with the load balancer
2329
-+func (api *Client) ApplyVMsToLoadBalancer(loadBalancerName *string, update *LoadBalancerVMUpdate) (*Task, error) {
2330
-+	body, err := json.Marshal(update)
2331
-+	if err != nil {
2332
-+		return nil, err
2333
-+	}
2334
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/loadbalancers/%s/update_vms", api.cfg.endpoint, api.cfg.tenantName,
2335
-+		api.cfg.clusterID, StringVal(loadBalancerName))
2336
-+	res, err := api.restClient.Post(uri, "application/json", bytes.NewReader(body), api.options.TokenOptions)
2337
-+	if err != nil {
2338
-+		return nil, err
2339
-+	}
2340
-+	defer res.Body.Close()
2341
-+	return getTask(getError(res))
2342
-+}
2343
-+
2344
-+// Gets all the zones in which the cluster has the VMs in.
2345
-+func (api *Client) GetZones() (zones []string, err error) {
2346
-+	uri := fmt.Sprintf("%s/v1/tenants/%s/clusters/%s/zones", api.cfg.endpoint, api.cfg.tenantName,
2347
-+		api.cfg.clusterID)
2348
-+	res, err := api.restClient.Get(uri, api.options.TokenOptions)
2349
-+	if err != nil {
2350
-+		return
2351
-+	}
2352
-+	defer res.Body.Close()
2353
-+	res, err = getError(res)
2354
-+	if err != nil {
2355
-+		return
2356
-+	}
2357
-+	err = json.NewDecoder(res.Body).Decode(&zones)
2358
-+	return
2359
-+}
2360
-+
2361
-+// Reads a task object out of the HTTP response. Takes an error argument
2362
-+// so that GetTask can easily wrap GetError. This function will do nothing
2363
-+// if e is not nil.
2364
-+// e.g. res, err := getTask(getError(someApi.Get()))
2365
-+func getTask(res *http.Response, e error) (*Task, error) {
2366
-+	if e != nil {
2367
-+		return nil, e
2368
-+	}
2369
-+	var task Task
2370
-+	err := json.NewDecoder(res.Body).Decode(&task)
2371
-+	if err != nil {
2372
-+		return nil, err
2373
-+	}
2374
-+	if StringVal(task.State) == "ERROR" {
2375
-+		// Critical: return task as well, so that it can be examined
2376
-+		// for error details.
2377
-+		return &task, TaskError{StringVal(task.ID), getFailedStep(&task)}
2378
-+	}
2379
-+	return &task, nil
2380
-+}
2381
-+
2382
-+// Gets the failed step in the task to get error details for failed task.
2383
-+func getFailedStep(task *Task) (step Step) {
2384
-+	var errorStep Step
2385
-+	for _, s := range task.Steps {
2386
-+		if StringVal(s.State) == "ERROR" {
2387
-+			errorStep = *s
2388
-+			break
2389
-+		}
2390
-+	}
2391
-+
2392
-+	return errorStep
2393
-+}
2394
-diff --git a/pkg/cloudprovider/providers/cascade/oidcclient.go b/pkg/cloudprovider/providers/cascade/oidcclient.go
2395
-new file mode 100644
2396
-index 0000000..6a71cc1
2397
-+++ b/pkg/cloudprovider/providers/cascade/oidcclient.go
2398
-@@ -0,0 +1,297 @@
2399
-+package cascade
2400
-+
2401
-+import (
2402
-+	"crypto/tls"
2403
-+	"crypto/x509"
2404
-+	"encoding/json"
2405
-+	"encoding/pem"
2406
-+	"fmt"
2407
-+	"io/ioutil"
2408
-+	"log"
2409
-+	"net/http"
2410
-+	"net/url"
2411
-+	"strings"
2412
-+)
2413
-+
2414
-+const tokenScope string = "openid offline_access"
2415
-+
2416
-+// OIDCClient is client for OIDC
2417
-+type OIDCClient struct {
2418
-+	httpClient *http.Client
2419
-+	logger     *log.Logger
2420
-+
2421
-+	Endpoint string
2422
-+	Options  *OIDCClientOptions
2423
-+}
2424
-+
2425
-+// OIDCClientOptions is OIDC client options
2426
-+type OIDCClientOptions struct {
2427
-+	// Whether or not to ignore any TLS errors when talking to Cascade,
2428
-+	// false by default.
2429
-+	IgnoreCertificate bool
2430
-+
2431
-+	// List of root CA's to use for server validation
2432
-+	// nil by default.
2433
-+	RootCAs *x509.CertPool
2434
-+
2435
-+	// The scope values to use when requesting tokens
2436
-+	TokenScope string
2437
-+}
2438
-+
2439
-+// NewOIDCClient creates an instance of OIDCClient
2440
-+func NewOIDCClient(endpoint string, options *OIDCClientOptions, logger *log.Logger) (c *OIDCClient) {
2441
-+	if logger == nil {
2442
-+		logger = log.New(ioutil.Discard, "", log.LstdFlags)
2443
-+	}
2444
-+
2445
-+	options = buildOptions(options)
2446
-+	tr := &http.Transport{
2447
-+		TLSClientConfig: &tls.Config{
2448
-+			InsecureSkipVerify: options.IgnoreCertificate,
2449
-+			RootCAs:            options.RootCAs},
2450
-+	}
2451
-+
2452
-+	c = &OIDCClient{
2453
-+		httpClient: &http.Client{Transport: tr},
2454
-+		logger:     logger,
2455
-+		Endpoint:   strings.TrimRight(endpoint, "/"),
2456
-+		Options:    options,
2457
-+	}
2458
-+	return
2459
-+}
2460
-+
2461
-+func buildOptions(options *OIDCClientOptions) (result *OIDCClientOptions) {
2462
-+	result = &OIDCClientOptions{
2463
-+		TokenScope: tokenScope,
2464
-+	}
2465
-+
2466
-+	if options == nil {
2467
-+		return
2468
-+	}
2469
-+
2470
-+	result.IgnoreCertificate = options.IgnoreCertificate
2471
-+
2472
-+	if options.RootCAs != nil {
2473
-+		result.RootCAs = options.RootCAs
2474
-+	}
2475
-+
2476
-+	if options.TokenScope != "" {
2477
-+		result.TokenScope = options.TokenScope
2478
-+	}
2479
-+
2480
-+	return
2481
-+}
2482
-+
2483
-+func (client *OIDCClient) buildURL(path string) (url string) {
2484
-+	return fmt.Sprintf("%s%s", client.Endpoint, path)
2485
-+}
2486
-+
2487
-+// Cert download helper
2488
-+
2489
-+const certDownloadPath string = "/afd/vecs/ssl"
2490
-+
2491
-+type lightWaveCert struct {
2492
-+	Value string `json:"encoded"`
2493
-+}
2494
-+
2495
-+// GetRootCerts gets root certs
2496
-+func (client *OIDCClient) GetRootCerts() (certList []*x509.Certificate, err error) {
2497
-+	// turn TLS verification off for
2498
-+	originalTr := client.httpClient.Transport
2499
-+	defer client.setTransport(originalTr)
2500
-+
2501
-+	tr := &http.Transport{
2502
-+		TLSClientConfig: &tls.Config{
2503
-+			InsecureSkipVerify: false,
2504
-+		},
2505
-+	}
2506
-+	client.setTransport(tr)
2507
-+
2508
-+	// get the certs
2509
-+	resp, err := client.httpClient.Get(client.buildURL(certDownloadPath))
2510
-+	if err != nil {
2511
-+		return
2512
-+	}
2513
-+	defer resp.Body.Close()
2514
-+	if resp.StatusCode != 200 {
2515
-+		err = fmt.Errorf("Unexpected error retrieving auth server certs: %v %s", resp.StatusCode, resp.Status)
2516
-+		return
2517
-+	}
2518
-+
2519
-+	// parse the certs
2520
-+	certsData := &[]lightWaveCert{}
2521
-+	err = json.NewDecoder(resp.Body).Decode(certsData)
2522
-+	if err != nil {
2523
-+		return
2524
-+	}
2525
-+
2526
-+	certList = make([]*x509.Certificate, len(*certsData))
2527
-+	for idx, cert := range *certsData {
2528
-+		block, _ := pem.Decode([]byte(cert.Value))
2529
-+		if block == nil {
2530
-+			err = fmt.Errorf("Unexpected response format: %v", certsData)
2531
-+			return nil, err
2532
-+		}
2533
-+
2534
-+		decodedCert, err := x509.ParseCertificate(block.Bytes)
2535
-+		if err != nil {
2536
-+			return nil, err
2537
-+		}
2538
-+
2539
-+		certList[idx] = decodedCert
2540
-+	}
2541
-+
2542
-+	return
2543
-+}
2544
-+
2545
-+func (client *OIDCClient) setTransport(tr http.RoundTripper) {
2546
-+	client.httpClient.Transport = tr
2547
-+}
2548
-+
2549
-+// Metadata request helpers
2550
-+const metadataPathFormat string = "/openidconnect/%s/.well-known/openid-configuration"
2551
-+
2552
-+// OIDCMetadataResponse is the response for Metadata request
2553
-+type OIDCMetadataResponse struct {
2554
-+	TokenEndpoint         string `json:"token_endpoint"`
2555
-+	AuthorizationEndpoint string `json:"authorization_endpoint"`
2556
-+	EndSessionEndpoint    string `json:"end_session_endpoint"`
2557
-+}
2558
-+
2559
-+func (client *OIDCClient) getMetadata(domain string) (metadata *OIDCMetadataResponse, err error) {
2560
-+	metadataPath := fmt.Sprintf(metadataPathFormat, domain)
2561
-+	request, err := http.NewRequest("GET", client.buildURL(metadataPath), nil)
2562
-+	if err != nil {
2563
-+		return nil, err
2564
-+	}
2565
-+
2566
-+	resp, err := client.httpClient.Do(request)
2567
-+	if err != nil {
2568
-+		return nil, err
2569
-+	}
2570
-+	defer resp.Body.Close()
2571
-+
2572
-+	err = client.checkResponse(resp)
2573
-+	if err != nil {
2574
-+		return nil, err
2575
-+	}
2576
-+
2577
-+	metadata = &OIDCMetadataResponse{}
2578
-+	err = json.NewDecoder(resp.Body).Decode(metadata)
2579
-+	if err != nil {
2580
-+		return nil, err
2581
-+	}
2582
-+
2583
-+	return
2584
-+}
2585
-+
2586
-+// Token request helpers
2587
-+
2588
-+const passwordGrantFormatString = "grant_type=password&username=%s&password=%s&scope=%s"
2589
-+const refreshTokenGrantFormatString = "grant_type=refresh_token&refresh_token=%s"
2590
-+const clientGrantFormatString = "grant_type=password&username=%s&password=%s&scope=%s&client_id=%s"
2591
-+
2592
-+// OIDCTokenResponse is the response for OIDC request
2593
-+type OIDCTokenResponse struct {
2594
-+	AccessToken  string `json:"access_token"`
2595
-+	ExpiresIn    int    `json:"expires_in"`
2596
-+	RefreshToken string `json:"refresh_token,omitempty"`
2597
-+	IDToken      string `json:"id_token"`
2598
-+	TokenType    string `json:"token_type"`
2599
-+}
2600
-+
2601
-+// GetTokenByPasswordGrant gets OIDC tokens by password
2602
-+func (client *OIDCClient) GetTokenByPasswordGrant(domain, username, password string) (tokens *OIDCTokenResponse, err error) {
2603
-+	metadata, err := client.getMetadata(domain)
2604
-+	if err != nil {
2605
-+		return nil, err
2606
-+	}
2607
-+
2608
-+	username = url.QueryEscape(username)
2609
-+	password = url.QueryEscape(password)
2610
-+	body := fmt.Sprintf(passwordGrantFormatString, username, password, client.Options.TokenScope)
2611
-+	return client.getToken(metadata.TokenEndpoint, body)
2612
-+}
2613
-+
2614
-+// GetClientTokenByPasswordGrant gets OIDC tokens by password
2615
-+func (client *OIDCClient) GetClientTokenByPasswordGrant(domain, username, password, clientID string) (tokens *OIDCTokenResponse, err error) {
2616
-+	metadata, err := client.getMetadata(domain)
2617
-+	if err != nil {
2618
-+		return nil, err
2619
-+	}
2620
-+
2621
-+	username = url.QueryEscape(username)
2622
-+	password = url.QueryEscape(password)
2623
-+	clientID = url.QueryEscape(clientID)
2624
-+	body := fmt.Sprintf(clientGrantFormatString, username, password, client.Options.TokenScope, clientID)
2625
-+	return client.getToken(metadata.TokenEndpoint, body)
2626
-+}
2627
-+
2628
-+// GetTokenByRefreshTokenGrant gets OIDC tokens by refresh token
2629
-+func (client *OIDCClient) GetTokenByRefreshTokenGrant(domain, refreshToken string) (tokens *OIDCTokenResponse, err error) {
2630
-+	metadata, err := client.getMetadata(domain)
2631
-+	if err != nil {
2632
-+		return nil, err
2633
-+	}
2634
-+
2635
-+	body := fmt.Sprintf(refreshTokenGrantFormatString, refreshToken)
2636
-+	return client.getToken(metadata.TokenEndpoint, body)
2637
-+}
2638
-+
2639
-+func (client *OIDCClient) getToken(tokenEndpoint, body string) (tokens *OIDCTokenResponse, err error) {
2640
-+	request, err := http.NewRequest("POST", tokenEndpoint, strings.NewReader(body))
2641
-+	if err != nil {
2642
-+		return nil, err
2643
-+	}
2644
-+	request.Header.Add("Content-Type", "application/x-www-form-urlencoded")
2645
-+
2646
-+	resp, err := client.httpClient.Do(request)
2647
-+	if err != nil {
2648
-+		return nil, err
2649
-+	}
2650
-+	defer resp.Body.Close()
2651
-+
2652
-+	err = client.checkResponse(resp)
2653
-+	if err != nil {
2654
-+		return nil, err
2655
-+	}
2656
-+
2657
-+	tokens = &OIDCTokenResponse{}
2658
-+	err = json.NewDecoder(resp.Body).Decode(tokens)
2659
-+	if err != nil {
2660
-+		return nil, err
2661
-+	}
2662
-+
2663
-+	return
2664
-+}
2665
-+
2666
-+// OIDCError is OIDC error
2667
-+type OIDCError struct {
2668
-+	Code    string `json:"error"`
2669
-+	Message string `json:"error_description"`
2670
-+}
2671
-+
2672
-+func (e OIDCError) Error() string {
2673
-+	return fmt.Sprintf("%v: %v", e.Code, e.Message)
2674
-+}
2675
-+
2676
-+func (client *OIDCClient) checkResponse(response *http.Response) (err error) {
2677
-+	if response.StatusCode/100 == 2 {
2678
-+		return
2679
-+	}
2680
-+
2681
-+	respBody, readErr := ioutil.ReadAll(response.Body)
2682
-+	if readErr != nil {
2683
-+		return fmt.Errorf(
2684
-+			"Status: %v, Body: %v [%v]", response.Status, string(respBody[:]), readErr)
2685
-+	}
2686
-+
2687
-+	var oidcErr OIDCError
2688
-+	err = json.Unmarshal(respBody, &oidcErr)
2689
-+	if err != nil || oidcErr.Code == "" {
2690
-+		return fmt.Errorf(
2691
-+			"Status: %v, Body: %v [%v]", response.Status, string(respBody[:]), readErr)
2692
-+	}
2693
-+
2694
-+	return oidcErr
2695
-+}
2696
-diff --git a/pkg/cloudprovider/providers/cascade/restclient.go b/pkg/cloudprovider/providers/cascade/restclient.go
2697
-new file mode 100644
2698
-index 0000000..71d8d1c
2699
-+++ b/pkg/cloudprovider/providers/cascade/restclient.go
2700
-@@ -0,0 +1,262 @@
2701
-+package cascade
2702
-+
2703
-+import (
2704
-+	"bytes"
2705
-+	"encoding/json"
2706
-+	"io"
2707
-+	"io/ioutil"
2708
-+	"net/http"
2709
-+)
2710
-+
2711
-+type restClient struct {
2712
-+	httpClient                *http.Client
2713
-+	authClient                *AuthClient
2714
-+	UpdateAccessTokenCallback TokenCallback
2715
-+}
2716
-+
2717
-+type request struct {
2718
-+	Method      string
2719
-+	URL         string
2720
-+	ContentType string
2721
-+	Body        io.Reader
2722
-+	Tokens      *TokenOptions
2723
-+}
2724
-+
2725
-+type page struct {
2726
-+	Items            []interface{} `json:"items"`
2727
-+	NextPageLink     string        `json:"nextPageLink"`
2728
-+	PreviousPageLink string        `json:"previousPageLink"`
2729
-+}
2730
-+
2731
-+type documentList struct {
2732
-+	Items []interface{}
2733
-+}
2734
-+
2735
-+type bodyRewinder func() io.Reader
2736
-+
2737
-+const appJson string = "application/json"
2738
-+const expiredAuthToken int32 = 1904
2739
-+
2740
-+func (client *restClient) AppendSlice(origSlice []interface{}, dataToAppend []interface{}) []interface{} {
2741
-+	origLen := len(origSlice)
2742
-+	newLen := origLen + len(dataToAppend)
2743
-+
2744
-+	if newLen > cap(origSlice) {
2745
-+		newSlice := make([]interface{}, (newLen+1)*2)
2746
-+		copy(newSlice, origSlice)
2747
-+		origSlice = newSlice
2748
-+	}
2749
-+
2750
-+	origSlice = origSlice[0:newLen]
2751
-+	copy(origSlice[origLen:newLen], dataToAppend)
2752
-+
2753
-+	return origSlice
2754
-+}
2755
-+
2756
-+func (client *restClient) Get(url string, tokens *TokenOptions) (res *http.Response, err error) {
2757
-+	req := request{"GET", url, "", nil, tokens}
2758
-+	res, err = client.SendRequest(&req, nil)
2759
-+	return
2760
-+}
2761
-+
2762
-+func (client *restClient) GetList(endpoint string, url string, tokens *TokenOptions) (result []byte, err error) {
2763
-+	req := request{"GET", url, "", nil, tokens}
2764
-+	res, err := client.SendRequest(&req, nil)
2765
-+	if err != nil {
2766
-+		return
2767
-+	}
2768
-+	res, err = getError(res)
2769
-+	if err != nil {
2770
-+		return
2771
-+	}
2772
-+
2773
-+	decoder := json.NewDecoder(res.Body)
2774
-+	decoder.UseNumber()
2775
-+
2776
-+	page := &page{}
2777
-+	err = decoder.Decode(page)
2778
-+	if err != nil {
2779
-+		return
2780
-+	}
2781
-+
2782
-+	documentList := &documentList{}
2783
-+	documentList.Items = client.AppendSlice(documentList.Items, page.Items)
2784
-+
2785
-+	for page.NextPageLink != "" {
2786
-+		req = request{"GET", endpoint + page.NextPageLink, "", nil, tokens}
2787
-+		res, err = client.SendRequest(&req, nil)
2788
-+		if err != nil {
2789
-+			return
2790
-+		}
2791
-+		res, err = getError(res)
2792
-+		if err != nil {
2793
-+			return
2794
-+		}
2795
-+
2796
-+		decoder = json.NewDecoder(res.Body)
2797
-+		decoder.UseNumber()
2798
-+
2799
-+		page.NextPageLink = ""
2800
-+		page.PreviousPageLink = ""
2801
-+
2802
-+		err = decoder.Decode(page)
2803
-+		if err != nil {
2804
-+			return
2805
-+		}
2806
-+
2807
-+		documentList.Items = client.AppendSlice(documentList.Items, page.Items)
2808
-+	}
2809
-+
2810
-+	result, err = json.Marshal(documentList)
2811
-+
2812
-+	return
2813
-+}
2814
-+
2815
-+func (client *restClient) Post(url string, contentType string, body io.ReadSeeker, tokens *TokenOptions) (res *http.Response, err error) {
2816
-+	if contentType == "" {
2817
-+		contentType = appJson
2818
-+	}
2819
-+
2820
-+	req := request{"POST", url, contentType, body, tokens}
2821
-+	rewinder := func() io.Reader {
2822
-+		body.Seek(0, 0)
2823
-+		return body
2824
-+	}
2825
-+	res, err = client.SendRequest(&req, rewinder)
2826
-+	return
2827
-+}
2828
-+
2829
-+func (client *restClient) Patch(url string, contentType string, body io.ReadSeeker, tokens *TokenOptions) (res *http.Response, err error) {
2830
-+	if contentType == "" {
2831
-+		contentType = appJson
2832
-+	}
2833
-+
2834
-+	req := request{"PATCH", url, contentType, body, tokens}
2835
-+	rewinder := func() io.Reader {
2836
-+		body.Seek(0, 0)
2837
-+		return body
2838
-+	}
2839
-+	res, err = client.SendRequest(&req, rewinder)
2840
-+	return
2841
-+}
2842
-+
2843
-+func (client *restClient) Put(url string, contentType string, body io.ReadSeeker, tokens *TokenOptions) (res *http.Response, err error) {
2844
-+	if contentType == "" {
2845
-+		contentType = appJson
2846
-+	}
2847
-+
2848
-+	req := request{"PUT", url, contentType, body, tokens}
2849
-+	rewinder := func() io.Reader {
2850
-+		body.Seek(0, 0)
2851
-+		return body
2852
-+	}
2853
-+	res, err = client.SendRequest(&req, rewinder)
2854
-+	return
2855
-+}
2856
-+
2857
-+func (client *restClient) Delete(url string, tokens *TokenOptions) (res *http.Response, err error) {
2858
-+	req := request{"DELETE", url, "", nil, tokens}
2859
-+	res, err = client.SendRequest(&req, nil)
2860
-+	return
2861
-+}
2862
-+
2863
-+func (client *restClient) SendRequest(req *request, bodyRewinder bodyRewinder) (res *http.Response, err error) {
2864
-+	res, err = client.sendRequestHelper(req)
2865
-+	// In most cases, we'll return immediately
2866
-+	// If the operation succeeded, but we got a 401 response and if we're using
2867
-+	// authentication, then we'll look into the body to see if the token expired
2868
-+	if err != nil {
2869
-+		return res, err
2870
-+	}
2871
-+	if res.StatusCode != 401 {
2872
-+		// It's not a 401, so the token didn't expire
2873
-+		return res, err
2874
-+	}
2875
-+	if req.Tokens == nil || req.Tokens.AccessToken == "" {
2876
-+		// We don't have a token, so we can't renew the token, no need to proceed
2877
-+		return res, err
2878
-+	}
2879
-+
2880
-+	// We're going to look in the body to see if it failed because the token expired
2881
-+	// This means we need to read the body, but the functions that call us also
2882
-+	// expect to read the body. So we read the body, then create a new reader
2883
-+	// so they can read the body as normal.
2884
-+	body, err := ioutil.ReadAll(res.Body)
2885
-+	if err != nil {
2886
-+		return res, err
2887
-+	}
2888
-+	res.Body = ioutil.NopCloser(bytes.NewReader(body))
2889
-+
2890
-+	// Now see if we had an expired token or not
2891
-+	var apiError APIError
2892
-+	err = json.Unmarshal(body, &apiError)
2893
-+	if err != nil {
2894
-+		return res, err
2895
-+	}
2896
-+	if apiError.ErrorCode != expiredAuthToken {
2897
-+		return res, nil
2898
-+	}
2899
-+
2900
-+	// We were told that the access token expired, so we acquire a new token using the refresh token.
2901
-+	newTokens, err := client.authClient.GetTokensByRefreshToken(req.Tokens.RefreshToken)
2902
-+	// If there is an error during token refresh, we assume that the refresh token also expired. So we login again using
2903
-+	// the machine account.
2904
-+	if err != nil {
2905
-+		newTokens, err = client.authClient.GetTokensByMachineAccount()
2906
-+		if err != nil {
2907
-+			return res, err
2908
-+		}
2909
-+	}
2910
-+	req.Tokens.AccessToken = newTokens.AccessToken
2911
-+	if client.UpdateAccessTokenCallback != nil {
2912
-+		client.UpdateAccessTokenCallback(newTokens.AccessToken)
2913
-+	}
2914
-+	if req.Body != nil && bodyRewinder != nil {
2915
-+		req.Body = bodyRewinder()
2916
-+	}
2917
-+	res, err = client.sendRequestHelper(req)
2918
-+	return res, nil
2919
-+}
2920
-+
2921
-+func (client *restClient) sendRequestHelper(req *request) (res *http.Response, err error) {
2922
-+	r, err := http.NewRequest(req.Method, req.URL, req.Body)
2923
-+	if err != nil {
2924
-+		return
2925
-+	}
2926
-+	if req.ContentType != "" {
2927
-+		r.Header.Add("Content-Type", req.ContentType)
2928
-+	}
2929
-+	if req.Tokens != nil && req.Tokens.AccessToken != "" {
2930
-+		r.Header.Add("Authorization", "Bearer "+req.Tokens.AccessToken)
2931
-+	}
2932
-+	res, err = client.httpClient.Do(r)
2933
-+	if err != nil {
2934
-+		return
2935
-+	}
2936
-+
2937
-+	return
2938
-+}
2939
-+
2940
-+// Reads an error out of the HTTP response, or does nothing if
2941
-+// no error occured.
2942
-+func getError(res *http.Response) (*http.Response, error) {
2943
-+	// Do nothing if the response is a successful 2xx
2944
-+	if res.StatusCode/100 == 2 {
2945
-+		return res, nil
2946
-+	}
2947
-+	var apiError APIError
2948
-+	// ReadAll is usually a bad practice, but here we need to read the response all
2949
-+	// at once because we may attempt to use the data twice. It's preferable to use
2950
-+	// methods that take io.Reader, e.g. json.NewDecoder
2951
-+	body, err := ioutil.ReadAll(res.Body)
2952
-+	if err != nil {
2953
-+		return nil, err
2954
-+	}
2955
-+	err = json.Unmarshal(body, &apiError)
2956
-+	if err != nil {
2957
-+		// If deserializing into ApiError fails, return a generic HttpError instead
2958
-+		return nil, HttpError{res.StatusCode, string(body[:])}
2959
-+	}
2960
-+	apiError.HttpStatusCode = res.StatusCode
2961
-+	return nil, apiError
2962
-+}
2963
-diff --git a/pkg/cloudprovider/providers/cascade/tests_owed b/pkg/cloudprovider/providers/cascade/tests_owed
2964
-new file mode 100644
2965
-index 0000000..dff5ab1
2966
-+++ b/pkg/cloudprovider/providers/cascade/tests_owed
2967
-@@ -0,0 +1,5 @@
2968
-+
2969
-+Yu Sheng
2970
-+Change-Id: Ifc11818f65a3e018aeea6988d9e2c0719b592920
2971
-+
2972
-+
2973
-diff --git a/pkg/cloudprovider/providers/cascade/utils.go b/pkg/cloudprovider/providers/cascade/utils.go
2974
-new file mode 100644
2975
-index 0000000..866f853
2976
-+++ b/pkg/cloudprovider/providers/cascade/utils.go
2977
-@@ -0,0 +1,29 @@
2978
-+package cascade
2979
-+
2980
-+func StringPtr(s string) *string {
2981
-+	return &s
2982
-+}
2983
-+
2984
-+// StringVal returns string from string pointer, nil returns ""
2985
-+func StringVal(p *string) (s string) {
2986
-+	if p != nil {
2987
-+		s = *p
2988
-+	}
2989
-+	return
2990
-+}
2991
-+
2992
-+func Int64Ptr(s int64) *int64 {
2993
-+	return &s
2994
-+}
2995
-+
2996
-+func Int64Val(s *int64) int64 {
2997
-+	return *s
2998
-+}
2999
-+
3000
-+func Int32Ptr(s int32) *int32 {
3001
-+	return &s
3002
-+}
3003
-+
3004
-+func BoolPtr(s bool) *bool {
3005
-+	return &s
3006
-+}
3007
-diff --git a/pkg/cloudprovider/providers/providers.go b/pkg/cloudprovider/providers/providers.go
3008
-index 7de9ca9..a655477 100644
3009
-+++ b/pkg/cloudprovider/providers/providers.go
3010
-@@ -21,6 +21,7 @@ import (
3011
- 	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
3012
- 	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
3013
- 	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/cloudstack"
3014
-+	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/cascade"
3015
- 	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
3016
- 	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/openstack"
3017
- 	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/ovirt"
3018
-diff --git a/pkg/kubeapiserver/authorizer/config.go b/pkg/kubeapiserver/authorizer/config.go
3019
-index a72ba5e..78fa9e1 100644
3020
-+++ b/pkg/kubeapiserver/authorizer/config.go
3021
-@@ -32,6 +32,7 @@ import (
3022
- 	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/node"
3023
- 	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac"
3024
- 	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy"
3025
-+	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/vke"
3026
- )
3027
- 
3028
- type AuthorizationConfig struct {
3029
-@@ -81,7 +82,12 @@ func (config AuthorizationConfig) New() (authorizer.Authorizer, authorizer.RuleR
3030
- 			)
3031
- 			nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), bootstrappolicy.NodeRules())
3032
- 			authorizers = append(authorizers, nodeAuthorizer)
3033
--
3034
-+		case modes.ModeVKE:
3035
-+			vkeAuthorizer, err := vke.NewAuthorizer()
3036
-+			if err != nil {
3037
-+				return nil, nil, err
3038
-+			}
3039
-+			authorizers = append(authorizers, vkeAuthorizer)
3040
- 		case modes.ModeAlwaysAllow:
3041
- 			alwaysAllowAuthorizer := authorizerfactory.NewAlwaysAllowAuthorizer()
3042
- 			authorizers = append(authorizers, alwaysAllowAuthorizer)
3043
-diff --git a/pkg/kubeapiserver/authorizer/modes/modes.go b/pkg/kubeapiserver/authorizer/modes/modes.go
3044
-index 54d0a62..73a763f 100644
3045
-+++ b/pkg/kubeapiserver/authorizer/modes/modes.go
3046
-@@ -25,9 +25,10 @@ const (
3047
- 	ModeWebhook     string = "Webhook"
3048
- 	ModeRBAC        string = "RBAC"
3049
- 	ModeNode        string = "Node"
3050
-+	ModeVKE         string = "VKE"
3051
- )
3052
- 
3053
--var AuthorizationModeChoices = []string{ModeAlwaysAllow, ModeAlwaysDeny, ModeABAC, ModeWebhook, ModeRBAC, ModeNode}
3054
-+var AuthorizationModeChoices = []string{ModeAlwaysAllow, ModeAlwaysDeny, ModeABAC, ModeWebhook, ModeRBAC, ModeNode, ModeVKE}
3055
- 
3056
- // IsValidAuthorizationMode returns true if the given authorization mode is a valid one for the apiserver
3057
- func IsValidAuthorizationMode(authzMode string) bool {
3058
-diff --git a/pkg/kubeapiserver/options/plugins.go b/pkg/kubeapiserver/options/plugins.go
3059
-index abcb5b4..292fcdd 100644
3060
-+++ b/pkg/kubeapiserver/options/plugins.go
3061
-@@ -57,6 +57,7 @@ import (
3062
- 	"k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
3063
- 	mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating"
3064
- 	validatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/validating"
3065
-+	"k8s.io/kubernetes/plugin/pkg/admission/vke"
3066
- 	utilfeature "k8s.io/apiserver/pkg/util/feature"
3067
- 	"k8s.io/kubernetes/pkg/features"
3068
- )
3069
-@@ -93,6 +94,7 @@ var AllOrderedPlugins = []string{
3070
- 	initialization.PluginName,               // Initializers
3071
- 	validatingwebhook.PluginName,            // ValidatingAdmissionWebhook
3072
- 	resourcequota.PluginName,                // ResourceQuota
3073
-+	vke.PluginName,                          // VMwareAdmissionController
3074
- 	deny.PluginName,                         // AlwaysDeny
3075
- }
3076
- 
3077
-@@ -125,6 +127,7 @@ func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
3078
- 	setdefault.Register(plugins)
3079
- 	resize.Register(plugins)
3080
- 	storageobjectinuseprotection.Register(plugins)
3081
-+	vke.Register(plugins)
3082
- }
3083
- 
3084
- // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver.
3085
-diff --git a/pkg/printers/internalversion/describe.go b/pkg/printers/internalversion/describe.go
3086
-index c1b59cf..f6b18a7 100644
3087
-+++ b/pkg/printers/internalversion/describe.go
3088
-@@ -757,6 +757,8 @@ func describeVolumes(volumes []api.Volume, w PrefixWriter, space string) {
3089
- 			printFlexVolumeSource(volume.VolumeSource.FlexVolume, w)
3090
- 		case volume.VolumeSource.Flocker != nil:
3091
- 			printFlockerVolumeSource(volume.VolumeSource.Flocker, w)
3092
-+		case volume.VolumeSource.CascadeDisk != nil:
3093
-+			printCascadeDiskVolumeSource(volume.VolumeSource.CascadeDisk, w)
3094
- 		default:
3095
- 			w.Write(LEVEL_1, "<unknown>\n")
3096
- 		}
3097
-@@ -1127,6 +1129,13 @@ func printCSIPersistentVolumeSource(csi *api.CSIPersistentVolumeSource, w Prefix
3098
- 		csi.Driver, csi.VolumeHandle, csi.ReadOnly)
3099
- }
3100
- 
3101
-+func printCascadeDiskVolumeSource(cascade *api.CascadeDiskVolumeSource, w PrefixWriter) {
3102
-+	w.Write(LEVEL_2, "Type:\tVKEDisk (a Persistent Disk resource in VKE)\n"+
3103
-+		"    DiskID:\t%v\n"+
3104
-+		"    FSType:\t%v\n",
3105
-+		cascade.DiskID, cascade.FSType)
3106
-+}
3107
-+
3108
- type PersistentVolumeDescriber struct {
3109
- 	clientset.Interface
3110
- }
3111
-@@ -1263,6 +1272,8 @@ func describePersistentVolume(pv *api.PersistentVolume, events *api.EventList) (
3112
- 			printFlockerVolumeSource(pv.Spec.Flocker, w)
3113
- 		case pv.Spec.CSI != nil:
3114
- 			printCSIPersistentVolumeSource(pv.Spec.CSI, w)
3115
-+		case pv.Spec.CascadeDisk != nil:
3116
-+			printCascadeDiskVolumeSource(pv.Spec.CascadeDisk, w)
3117
- 		default:
3118
- 			w.Write(LEVEL_1, "<unknown>\n")
3119
- 		}
3120
-diff --git a/pkg/security/podsecuritypolicy/util/util.go b/pkg/security/podsecuritypolicy/util/util.go
3121
-index 3f29f6e..8e96503 100644
3122
-+++ b/pkg/security/podsecuritypolicy/util/util.go
3123
-@@ -68,6 +68,7 @@ func GetAllFSTypesAsSet() sets.String {
3124
- 		string(policy.PortworxVolume),
3125
- 		string(policy.ScaleIO),
3126
- 		string(policy.CSI),
3127
-+		string(policy.CascadeDisk),
3128
- 	)
3129
- 	return fstypes
3130
- }
3131
-@@ -129,6 +130,8 @@ func GetVolumeFSType(v api.Volume) (policy.FSType, error) {
3132
- 		return policy.PortworxVolume, nil
3133
- 	case v.ScaleIO != nil:
3134
- 		return policy.ScaleIO, nil
3135
-+	case v.CascadeDisk != nil:
3136
-+		return policy.CascadeDisk, nil
3137
- 	}
3138
- 
3139
- 	return "", fmt.Errorf("unknown volume type for volume: %#v", v)
3140
-diff --git a/pkg/volume/cascade_disk/BUILD b/pkg/volume/cascade_disk/BUILD
3141
-new file mode 100644
3142
-index 0000000..3386612
3143
-+++ b/pkg/volume/cascade_disk/BUILD
3144
-@@ -0,0 +1,43 @@
3145
-+package(default_visibility = ["//visibility:public"])
3146
-+
3147
-+load(
3148
-+    "@io_bazel_rules_go//go:def.bzl",
3149
-+    "go_library",
3150
-+    "go_test",
3151
-+)
3152
-+
3153
-+go_library(
3154
-+    name = "go_default_library",
3155
-+    srcs = [
3156
-+        "attacher.go",
3157
-+        "cascade_disk.go",
3158
-+        "cascade_util.go",
3159
-+    ],
3160
-+    deps = [
3161
-+        "//pkg/cloudprovider:go_default_library",
3162
-+        "//pkg/cloudprovider/providers/cascade:go_default_library",
3163
-+        "//pkg/util/mount:go_default_library",
3164
-+        "//pkg/util/strings:go_default_library",
3165
-+        "//pkg/volume:go_default_library",
3166
-+        "//pkg/volume/util:go_default_library",
3167
-+        "//pkg/volume/util/volumehelper:go_default_library",
3168
-+        "//vendor/github.com/golang/glog:go_default_library",
3169
-+        "//vendor/k8s.io/api/core/v1:go_default_library",
3170
-+        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
3171
-+        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
3172
-+        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
3173
-+    ],
3174
-+)
3175
-+
3176
-+filegroup(
3177
-+    name = "package-srcs",
3178
-+    srcs = glob(["**"]),
3179
-+    tags = ["automanaged"],
3180
-+    visibility = ["//visibility:private"],
3181
-+)
3182
-+
3183
-+filegroup(
3184
-+    name = "all-srcs",
3185
-+    srcs = [":package-srcs"],
3186
-+    tags = ["automanaged"],
3187
-+)
3188
-diff --git a/pkg/volume/cascade_disk/OWNERS b/pkg/volume/cascade_disk/OWNERS
3189
-new file mode 100644
3190
-index 0000000..c3a4ed7
3191
-+++ b/pkg/volume/cascade_disk/OWNERS
3192
-@@ -0,0 +1,2 @@
3193
-+maintainers:
3194
-+- ashokc
3195
-diff --git a/pkg/volume/cascade_disk/attacher.go b/pkg/volume/cascade_disk/attacher.go
3196
-new file mode 100644
3197
-index 0000000..c19c37c
3198
-+++ b/pkg/volume/cascade_disk/attacher.go
3199
-@@ -0,0 +1,264 @@
3200
-+package cascade_disk
3201
-+
3202
-+import (
3203
-+	"fmt"
3204
-+	"os"
3205
-+	"path"
3206
-+	"time"
3207
-+
3208
-+	"github.com/golang/glog"
3209
-+	"k8s.io/api/core/v1"
3210
-+	"k8s.io/apimachinery/pkg/types"
3211
-+	"k8s.io/kubernetes/pkg/cloudprovider/providers/cascade"
3212
-+	"k8s.io/kubernetes/pkg/util/mount"
3213
-+	"k8s.io/kubernetes/pkg/volume"
3214
-+	volumeutil "k8s.io/kubernetes/pkg/volume/util"
3215
-+)
3216
-+
3217
-+type cascadeDiskAttacher struct {
3218
-+	host         volume.VolumeHost
3219
-+	cascadeDisks cascade.Disks
3220
-+}
3221
-+
3222
-+var _ volume.Attacher = &cascadeDiskAttacher{}
3223
-+var _ volume.AttachableVolumePlugin = &cascadeDiskPlugin{}
3224
-+
3225
-+func (plugin *cascadeDiskPlugin) NewAttacher() (volume.Attacher, error) {
3226
-+	cascadeCloud, err := getCloudProvider(plugin.host.GetCloudProvider())
3227
-+	if err != nil {
3228
-+		glog.Errorf("Cascade attacher: NewAttacher failed to get cloud provider")
3229
-+		return nil, err
3230
-+	}
3231
-+
3232
-+	return &cascadeDiskAttacher{
3233
-+		host:         plugin.host,
3234
-+		cascadeDisks: cascadeCloud,
3235
-+	}, nil
3236
-+}
3237
-+
3238
-+// Attach attaches the volume specified by the given spec to the given host. On success, returns the device path where
3239
-+// the device was attached on the node.
3240
-+func (attacher *cascadeDiskAttacher) Attach(spec *volume.Spec, nodeName types.NodeName) (string, error) {
3241
-+	hostName := string(nodeName)
3242
-+	volumeSource, _, err := getVolumeSource(spec)
3243
-+	if err != nil {
3244
-+		glog.Errorf("Cascade attacher: Attach failed to get volume source")
3245
-+		return "", err
3246
-+	}
3247
-+
3248
-+	// cascadeDisks.AttachDisk checks if disk is already attached to the node. So we don't have to do that separately
3249
-+	// here.
3250
-+	glog.V(4).Infof("Cascade: Attach disk called for host %s", hostName)
3251
-+	devicePath, err := attacher.cascadeDisks.AttachDisk(volumeSource.DiskID, nodeName)
3252
-+	if err != nil {
3253
-+		glog.Errorf("Error attaching volume %q to node %q: %+v", volumeSource.DiskID, nodeName, err)
3254
-+		return "", err
3255
-+	}
3256
-+	return devicePath, nil
3257
-+}
3258
-+
3259
-+// VolumesAreAttached verifies whether the volumes specified in the spec are attached to the specified node.
3260
-+func (attacher *cascadeDiskAttacher) VolumesAreAttached(specs []*volume.Spec,
3261
-+	nodeName types.NodeName) (map[*volume.Spec]bool, error) {
3262
-+	volumesAttachedCheck := make(map[*volume.Spec]bool)
3263
-+	volumeSpecMap := make(map[string]*volume.Spec)
3264
-+	diskIDList := []string{}
3265
-+	for _, spec := range specs {
3266
-+		volumeSource, _, err := getVolumeSource(spec)
3267
-+		if err != nil {
3268
-+			glog.Errorf("Error getting volume (%q) source : %v", spec.Name(), err)
3269
-+			continue
3270
-+		}
3271
-+
3272
-+		diskIDList = append(diskIDList, volumeSource.DiskID)
3273
-+		volumesAttachedCheck[spec] = true
3274
-+		volumeSpecMap[volumeSource.DiskID] = spec
3275
-+	}
3276
-+	attachedResult, err := attacher.cascadeDisks.DisksAreAttached(diskIDList, nodeName)
3277
-+	if err != nil {
3278
-+		glog.Errorf(
3279
-+			"Error checking if volumes (%v) are attached to current node (%q). err=%v",
3280
-+			diskIDList, nodeName, err)
3281
-+		return volumesAttachedCheck, err
3282
-+	}
3283
-+
3284
-+	for diskID, attached := range attachedResult {
3285
-+		if !attached {
3286
-+			spec := volumeSpecMap[diskID]
3287
-+			volumesAttachedCheck[spec] = false
3288
-+			glog.V(2).Infof("VolumesAreAttached: check volume %q (specName: %q) is no longer attached",
3289
-+				diskID, spec.Name())
3290
-+		}
3291
-+	}
3292
-+	return volumesAttachedCheck, nil
3293
-+}
3294
-+
3295
-+// WaitForAttach waits until the devicePath returned by the Attach call is available.
3296
-+func (attacher *cascadeDiskAttacher) WaitForAttach(spec *volume.Spec, devicePath string, _ *v1.Pod,
3297
-+	timeout time.Duration) (string, error) {
3298
-+	volumeSource, _, err := getVolumeSource(spec)
3299
-+	if err != nil {
3300
-+		glog.Errorf("Cascade attacher: WaitForAttach failed to get volume source")
3301
-+		return "", err
3302
-+	}
3303
-+
3304
-+	if devicePath == "" {
3305
-+		return "", fmt.Errorf("WaitForAttach failed for disk %s: devicePath is empty.", volumeSource.DiskID)
3306
-+	}
3307
-+
3308
-+	ticker := time.NewTicker(checkSleepDuration)
3309
-+	defer ticker.Stop()
3310
-+
3311
-+	timer := time.NewTimer(timeout)
3312
-+	defer timer.Stop()
3313
-+
3314
-+	for {
3315
-+		select {
3316
-+		case <-ticker.C:
3317
-+			glog.V(4).Infof("Checking disk %s is attached", volumeSource.DiskID)
3318
-+			devicePath := getDiskByIdPath(devicePath)
3319
-+			checkPath, err := verifyDevicePath(devicePath)
3320
-+			if err != nil {
3321
-+				// Log error, if any, and continue checking periodically. See issue #11321
3322
-+				glog.Warningf("Cascade attacher: WaitForAttach with devicePath %s Checking PD %s Error verify "+
3323
-+					"path", devicePath, volumeSource.DiskID)
3324
-+			} else if checkPath != "" {
3325
-+				// A device path has successfully been created for the disk
3326
-+				glog.V(4).Infof("Successfully found attached disk %s.", volumeSource.DiskID)
3327
-+				return checkPath, nil
3328
-+			}
3329
-+		case <-timer.C:
3330
-+			return "", fmt.Errorf("Could not find attached disk %s. Timeout waiting for mount paths to be "+
3331
-+				"created.", volumeSource.DiskID)
3332
-+		}
3333
-+	}
3334
-+}
3335
-+
3336
-+// GetDeviceMountPath returns a path where the device should point which should be bind mounted for individual volumes.
3337
-+func (attacher *cascadeDiskAttacher) GetDeviceMountPath(spec *volume.Spec) (string, error) {
3338
-+	volumeSource, _, err := getVolumeSource(spec)
3339
-+	if err != nil {
3340
-+		glog.Errorf("Cascade attacher: GetDeviceMountPath failed to get volume source")
3341
-+		return "", err
3342
-+	}
3343
-+
3344
-+	return makeGlobalPDPath(attacher.host, volumeSource.DiskID), nil
3345
-+}
3346
-+
3347
-+// GetMountDeviceRefs finds all other references to the device referenced by deviceMountPath; returns a list of paths.
3348
-+func (plugin *cascadeDiskPlugin) GetDeviceMountRefs(deviceMountPath string) ([]string, error) {
3349
-+	mounter := plugin.host.GetMounter(plugin.GetPluginName())
3350
-+	return mount.GetMountRefs(mounter, deviceMountPath)
3351
-+}
3352
-+
3353
-+// MountDevice mounts device to global mount point.
3354
-+func (attacher *cascadeDiskAttacher) MountDevice(spec *volume.Spec, devicePath string, deviceMountPath string) error {
3355
-+	mounter := attacher.host.GetMounter(cascadeDiskPluginName)
3356
-+	notMnt, err := mounter.IsLikelyNotMountPoint(deviceMountPath)
3357
-+	if err != nil {
3358
-+		if os.IsNotExist(err) {
3359
-+			if err := os.MkdirAll(deviceMountPath, 0750); err != nil {
3360
-+				glog.Errorf("Failed to create directory at %#v. err: %s", deviceMountPath, err)
3361
-+				return err
3362
-+			}
3363
-+			notMnt = true
3364
-+		} else {
3365
-+			return err
3366
-+		}
3367
-+	}
3368
-+
3369
-+	volumeSource, _, err := getVolumeSource(spec)
3370
-+	if err != nil {
3371
-+		glog.Errorf("Cascade attacher: MountDevice failed to get volume source. err: %s", err)
3372
-+		return err
3373
-+	}
3374
-+
3375
-+	options := []string{}
3376
-+
3377
-+	if notMnt {
3378
-+		diskMounter := volumeutil.NewSafeFormatAndMountFromHost(cascadeDiskPluginName, attacher.host)
3379
-+		mountOptions := volumeutil.MountOptionFromSpec(spec)
3380
-+		err = diskMounter.FormatAndMount(devicePath, deviceMountPath, volumeSource.FSType, mountOptions)
3381
-+		if err != nil {
3382
-+			os.Remove(deviceMountPath)
3383
-+			return err
3384
-+		}
3385
-+		glog.V(4).Infof("formatting spec %v devicePath %v deviceMountPath %v fs %v with options %+v",
3386
-+			spec.Name(), devicePath, deviceMountPath, volumeSource.FSType, options)
3387
-+	}
3388
-+	return nil
3389
-+}
3390
-+
3391
-+type cascadeDiskDetacher struct {
3392
-+	mounter      mount.Interface
3393
-+	cascadeDisks cascade.Disks
3394
-+}
3395
-+
3396
-+var _ volume.Detacher = &cascadeDiskDetacher{}
3397
-+
3398
-+// NewDetacher returns the detacher associated with the Cascade volume plugin.
3399
-+func (plugin *cascadeDiskPlugin) NewDetacher() (volume.Detacher, error) {
3400
-+	cascadeCloud, err := getCloudProvider(plugin.host.GetCloudProvider())
3401
-+	if err != nil {
3402
-+		glog.Errorf("Cascade attacher: NewDetacher failed to get cloud provider. err: %s", err)
3403
-+		return nil, err
3404
-+	}
3405
-+
3406
-+	return &cascadeDiskDetacher{
3407
-+		mounter:      plugin.host.GetMounter(plugin.GetPluginName()),
3408
-+		cascadeDisks: cascadeCloud,
3409
-+	}, nil
3410
-+}
3411
-+
3412
-+// Detach detaches the given device from the given host.
3413
-+func (detacher *cascadeDiskDetacher) Detach(deviceMountPath string, nodeName types.NodeName) error {
3414
-+	hostName := string(nodeName)
3415
-+	diskID := path.Base(deviceMountPath)
3416
-+	attached, err := detacher.cascadeDisks.DiskIsAttached(diskID, nodeName)
3417
-+	if err != nil {
3418
-+		// Log error and continue with detach
3419
-+		glog.Errorf(
3420
-+			"Error checking if persistent disk (%q) is already attached to current node (%q). "+
3421
-+				"Will continue and try detach anyway. err=%v", diskID, hostName, err)
3422
-+	}
3423
-+
3424
-+	if err == nil && !attached {
3425
-+		// Volume is already detached from node.
3426
-+		glog.V(4).Infof("detach operation was successful. persistent disk %q is already detached "+
3427
-+			"from node %q.", diskID, hostName)
3428
-+		return nil
3429
-+	}
3430
-+
3431
-+	if err := detacher.cascadeDisks.DetachDisk(diskID, nodeName); err != nil {
3432
-+		glog.Errorf("Error detaching volume %q: %v", diskID, err)
3433
-+		return err
3434
-+	}
3435
-+	return nil
3436
-+}
3437
-+
3438
-+// WaitForDetach waits for the devicePath to become unavailable.
3439
-+func (detacher *cascadeDiskDetacher) WaitForDetach(devicePath string, timeout time.Duration) error {
3440
-+	ticker := time.NewTicker(checkSleepDuration)
3441
-+	defer ticker.Stop()
3442
-+	timer := time.NewTimer(timeout)
3443
-+	defer timer.Stop()
3444
-+
3445
-+	for {
3446
-+		select {
3447
-+		case <-ticker.C:
3448
-+			glog.V(4).Infof("Checking device %q is detached.", devicePath)
3449
-+			if pathExists, err := volumeutil.PathExists(devicePath); err != nil {
3450
-+				return fmt.Errorf("Error checking if device path exists: %v", err)
3451
-+			} else if !pathExists {
3452
-+				return nil
3453
-+			}
3454
-+		case <-timer.C:
3455
-+			return fmt.Errorf("Timeout reached; Device %v is still attached", devicePath)
3456
-+		}
3457
-+	}
3458
-+}
3459
-+
3460
-+// UnmountDevice unmounts the disk specified by the device mount path.
3461
-+func (detacher *cascadeDiskDetacher) UnmountDevice(deviceMountPath string) error {
3462
-+	return volumeutil.UnmountPath(deviceMountPath, detacher.mounter)
3463
-+}
3464
-diff --git a/pkg/volume/cascade_disk/cascade_disk.go b/pkg/volume/cascade_disk/cascade_disk.go
3465
-new file mode 100644
3466
-index 0000000..d1b791c
3467
-+++ b/pkg/volume/cascade_disk/cascade_disk.go
3468
-@@ -0,0 +1,390 @@
3469
-+package cascade_disk
3470
-+
3471
-+import (
3472
-+	"fmt"
3473
-+	"os"
3474
-+	"path"
3475
-+
3476
-+	"github.com/golang/glog"
3477
-+	"k8s.io/api/core/v1"
3478
-+	"k8s.io/apimachinery/pkg/api/resource"
3479
-+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3480
-+	"k8s.io/apimachinery/pkg/types"
3481
-+	"k8s.io/kubernetes/pkg/util/mount"
3482
-+	utilstrings "k8s.io/kubernetes/pkg/util/strings"
3483
-+	"k8s.io/kubernetes/pkg/volume"
3484
-+	"k8s.io/kubernetes/pkg/volume/util"
3485
-+)
3486
-+
3487
-+// This is the primary entrypoint for volume plugins.
3488
-+func ProbeVolumePlugins() []volume.VolumePlugin {
3489
-+	return []volume.VolumePlugin{&cascadeDiskPlugin{}}
3490
-+}
3491
-+
3492
-+type cascadeDiskPlugin struct {
3493
-+	host volume.VolumeHost
3494
-+}
3495
-+
3496
-+var _ volume.VolumePlugin = &cascadeDiskPlugin{}
3497
-+var _ volume.PersistentVolumePlugin = &cascadeDiskPlugin{}
3498
-+var _ volume.DeletableVolumePlugin = &cascadeDiskPlugin{}
3499
-+var _ volume.ProvisionableVolumePlugin = &cascadeDiskPlugin{}
3500
-+
3501
-+const (
3502
-+	cascadeDiskPluginName = "kubernetes.io/vke-disk"
3503
-+)
3504
-+
3505
-+// Init initializes the Cascade volume plugin.
3506
-+func (plugin *cascadeDiskPlugin) Init(host volume.VolumeHost) error {
3507
-+	plugin.host = host
3508
-+	return nil
3509
-+}
3510
-+
3511
-+// GetPluginName returns the name of the Cascade volume plugin.
3512
-+func (plugin *cascadeDiskPlugin) GetPluginName() string {
3513
-+	return cascadeDiskPluginName
3514
-+}
3515
-+
3516
-+// GetVolumeName returns the name of the volume which is the diskID in our case.
3517
-+func (plugin *cascadeDiskPlugin) GetVolumeName(spec *volume.Spec) (string, error) {
3518
-+	volumeSource, _, err := getVolumeSource(spec)
3519
-+	if err != nil {
3520
-+		glog.Errorf("Cascade volume plugin: GetVolumeName failed to get volume source")
3521
-+		return "", err
3522
-+	}
3523
-+
3524
-+	return volumeSource.DiskID, nil
3525
-+}
3526
-+
3527
-+// CanSupport specifies whether the Cascade volume plguin can support the specific resource type.
3528
-+// Cascade plugin only supports the persistent volume and volume resource which has the Cascade disk annotation.
3529
-+func (plugin *cascadeDiskPlugin) CanSupport(spec *volume.Spec) bool {
3530
-+	return (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.CascadeDisk != nil) ||
3531
-+		(spec.Volume != nil && spec.Volume.CascadeDisk != nil)
3532
-+}
3533
-+
3534
-+// RequiresRemount specifies whether remount is required for the disk.
3535
-+func (plugin *cascadeDiskPlugin) RequiresRemount() bool {
3536
-+	return false
3537
-+}
3538
-+
3539
-+// SupportsMountOption specifies whether the Cascade volume plugin supports the mount operation.
3540
-+func (plugin *cascadeDiskPlugin) SupportsMountOption() bool {
3541
-+	return true
3542
-+}
3543
-+
3544
-+// SupportsBulkVolumeVerification specifies whether bulk volume verification is supported.
3545
-+func (plugin *cascadeDiskPlugin) SupportsBulkVolumeVerification() bool {
3546
-+	return false
3547
-+}
3548
-+
3549
-+// NewMounter returns the mounter associated with the Cascade volume plugin.
3550
-+func (plugin *cascadeDiskPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod,
3551
-+	_ volume.VolumeOptions) (volume.Mounter, error) {
3552
-+	return plugin.newMounterInternal(spec, pod.UID, &CascadeDiskUtil{}, plugin.host.GetMounter(plugin.GetPluginName()))
3553
-+}
3554
-+
3555
-+// NewUnmounter returns the unmounter associated with the Cascade volume plugin.
3556
-+func (plugin *cascadeDiskPlugin) NewUnmounter(volName string, podUID types.UID) (volume.Unmounter, error) {
3557
-+	return plugin.newUnmounterInternal(volName, podUID, &CascadeDiskUtil{},
3558
-+		plugin.host.GetMounter(plugin.GetPluginName()))
3559
-+}
3560
-+
3561
-+func (plugin *cascadeDiskPlugin) newMounterInternal(spec *volume.Spec, podUID types.UID, manager diskManager,
3562
-+	mounter mount.Interface) (volume.Mounter, error) {
3563
-+	volumeSource, _, err := getVolumeSource(spec)
3564
-+	if err != nil {
3565
-+		glog.Errorf("Cascade volume plugin: newMounterInternal failed to get volume source")
3566
-+		return nil, err
3567
-+	}
3568
-+
3569
-+	diskID := volumeSource.DiskID
3570
-+	fsType := volumeSource.FSType
3571
-+
3572
-+	return &cascadeDiskMounter{
3573
-+		cascadeDisk: &cascadeDisk{
3574
-+			podUID:  podUID,
3575
-+			volName: spec.Name(),
3576
-+			diskID:  diskID,
3577
-+			manager: manager,
3578
-+			mounter: mounter,
3579
-+			plugin:  plugin,
3580
-+		},
3581
-+		fsType:      fsType,
3582
-+		diskMounter: util.NewSafeFormatAndMountFromHost(plugin.GetPluginName(), plugin.host)}, nil
3583
-+}
3584
-+
3585
-+func (plugin *cascadeDiskPlugin) newUnmounterInternal(volName string, podUID types.UID, manager diskManager,
3586
-+	mounter mount.Interface) (volume.Unmounter, error) {
3587
-+	return &cascadeDiskUnmounter{
3588
-+		&cascadeDisk{
3589
-+			podUID:  podUID,
3590
-+			volName: volName,
3591
-+			manager: manager,
3592
-+			mounter: mounter,
3593
-+			plugin:  plugin,
3594
-+		}}, nil
3595
-+}
3596
-+
3597
-+// ConstructVolumeSpec constructs a Cascade volume spec based on the name and mount path.
3598
-+func (plugin *cascadeDiskPlugin) ConstructVolumeSpec(volumeSpecName, mountPath string) (*volume.Spec, error) {
3599
-+	mounter := plugin.host.GetMounter(plugin.GetPluginName())
3600
-+	pluginDir := plugin.host.GetPluginDir(plugin.GetPluginName())
3601
-+	diskID, err := mounter.GetDeviceNameFromMount(mountPath, pluginDir)
3602
-+	if err != nil {
3603
-+		return nil, err
3604
-+	}
3605
-+
3606
-+	cascadeDisk := &v1.Volume{
3607
-+		Name: volumeSpecName,
3608
-+		VolumeSource: v1.VolumeSource{
3609
-+			CascadeDisk: &v1.CascadeDiskVolumeSource{
3610
-+				DiskID: diskID,
3611
-+			},
3612
-+		},
3613
-+	}
3614
-+	return volume.NewSpecFromVolume(cascadeDisk), nil
3615
-+}
3616
-+
3617
-+// Abstract interface to disk operations.
3618
-+type diskManager interface {
3619
-+	// Creates a volume
3620
-+	CreateVolume(provisioner *cascadeDiskProvisioner) (diskID string, volumeSizeGB int, fstype string, err error)
3621
-+	// Deletes a volume
3622
-+	DeleteVolume(deleter *cascadeDiskDeleter) error
3623
-+}
3624
-+
3625
-+// cascadeDisk volumes are disk resources attached to the kubelet's host machine and exposed to the pod.
3626
-+type cascadeDisk struct {
3627
-+	volName string
3628
-+	podUID  types.UID
3629
-+	diskID  string
3630
-+	fsType  string
3631
-+	manager diskManager
3632
-+	mounter mount.Interface
3633
-+	plugin  *cascadeDiskPlugin
3634
-+	volume.MetricsNil
3635
-+}
3636
-+
3637
-+var _ volume.Mounter = &cascadeDiskMounter{}
3638
-+
3639
-+type cascadeDiskMounter struct {
3640
-+	*cascadeDisk
3641
-+	fsType      string
3642
-+	diskMounter *mount.SafeFormatAndMount
3643
-+}
3644
-+
3645
-+// GetAttributes returns the attributes associated with a Cascade disk.
3646
-+func (b *cascadeDiskMounter) GetAttributes() volume.Attributes {
3647
-+	return volume.Attributes{
3648
-+		SupportsSELinux: true,
3649
-+	}
3650
-+}
3651
-+
3652
-+// CanMount checks prior to mount operations to verify that the required components (binaries, etc.) to mount the
3653
-+// volume are available on the underlying node. If not, it returns an error.
3654
-+func (b *cascadeDiskMounter) CanMount() error {
3655
-+	return nil
3656
-+}
3657
-+
3658
-+// SetUp attaches the disk and bind mounts to the volume path.
3659
-+func (b *cascadeDiskMounter) SetUp(fsGroup *int64) error {
3660
-+	return b.SetUpAt(b.GetPath(), fsGroup)
3661
-+}
3662
-+
3663
-+// SetUpAt attaches the disk and bind mounts to the volume path.
3664
-+func (b *cascadeDiskMounter) SetUpAt(dir string, fsGroup *int64) error {
3665
-+	glog.V(4).Infof("Cascade Persistent Disk setup %s to %s", b.diskID, dir)
3666
-+
3667
-+	// TODO: handle failed mounts here.
3668
-+	notmnt, err := b.mounter.IsLikelyNotMountPoint(dir)
3669
-+	if err != nil && !os.IsNotExist(err) {
3670
-+		glog.Errorf("cannot validate mount point: %s %v", dir, err)
3671
-+		return err
3672
-+	}
3673
-+	if !notmnt {
3674
-+		return nil
3675
-+	}
3676
-+
3677
-+	if err := os.MkdirAll(dir, 0750); err != nil {
3678
-+		glog.Errorf("mkdir failed on disk %s (%v)", dir, err)
3679
-+		return err
3680
-+	}
3681
-+
3682
-+	options := []string{"bind"}
3683
-+
3684
-+	// Perform a bind mount to the full path to allow duplicate mounts of the same PD.
3685
-+	globalPDPath := makeGlobalPDPath(b.plugin.host, b.diskID)
3686
-+	glog.V(4).Infof("attempting to mount %s", dir)
3687
-+
3688
-+	err = b.mounter.Mount(globalPDPath, dir, "", options)
3689
-+	if err != nil {
3690
-+		notmnt, mntErr := b.mounter.IsLikelyNotMountPoint(dir)
3691
-+		if mntErr != nil {
3692
-+			glog.Errorf("IsLikelyNotMountPoint check failed: %v", mntErr)
3693
-+			return err
3694
-+		}
3695
-+		if !notmnt {
3696
-+			if mntErr = b.mounter.Unmount(dir); mntErr != nil {
3697
-+				glog.Errorf("Failed to unmount: %v", mntErr)
3698
-+				return err
3699
-+			}
3700
-+			notmnt, mntErr := b.mounter.IsLikelyNotMountPoint(dir)
3701
-+			if mntErr != nil {
3702
-+				glog.Errorf("IsLikelyNotMountPoint check failed: %v", mntErr)
3703
-+				return err
3704
-+			}
3705
-+			if !notmnt {
3706
-+				glog.Errorf("%s is still mounted, despite call to unmount().  Will try again next sync loop.",
3707
-+					b.GetPath())
3708
-+				return err
3709
-+			}
3710
-+		}
3711
-+		os.Remove(dir)
3712
-+		glog.Errorf("Mount of disk %s failed: %v", dir, err)
3713
-+		return err
3714
-+	}
3715
-+	volume.SetVolumeOwnership(b, fsGroup)
3716
-+
3717
-+	return nil
3718
-+}
3719
-+
3720
-+var _ volume.Unmounter = &cascadeDiskUnmounter{}
3721
-+
3722
-+type cascadeDiskUnmounter struct {
3723
-+	*cascadeDisk
3724
-+}
3725
-+
3726
-+// TearDown unmounts the bind mount, and detaches the disk only if the disk resource was the last reference to that
3727
-+// disk on the kubelet.
3728
-+func (c *cascadeDiskUnmounter) TearDown() error {
3729
-+	return c.TearDownAt(c.GetPath())
3730
-+}
3731
-+
3732
-+// TearDownAt unmounts the bind mount, and detaches the disk only if the disk resource was the last reference to that
3733
-+// disk on the kubelet.
3734
-+func (c *cascadeDiskUnmounter) TearDownAt(dir string) error {
3735
-+	return util.UnmountPath(dir, c.mounter)
3736
-+}
3737
-+
3738
-+func makeGlobalPDPath(host volume.VolumeHost, diskID string) string {
3739
-+	return path.Join(host.GetPluginDir(cascadeDiskPluginName), mount.MountsInGlobalPDPath, diskID)
3740
-+}
3741
-+
3742
-+func (cd *cascadeDisk) GetPath() string {
3743
-+	name := cascadeDiskPluginName
3744
-+	return cd.plugin.host.GetPodVolumeDir(cd.podUID, utilstrings.EscapeQualifiedNameForDisk(name), cd.volName)
3745
-+}
3746
-+
3747
-+func (plugin *cascadeDiskPlugin) GetAccessModes() []v1.PersistentVolumeAccessMode {
3748
-+	return []v1.PersistentVolumeAccessMode{
3749
-+		v1.ReadWriteOnce,
3750
-+	}
3751
-+}
3752
-+
3753
-+type cascadeDiskDeleter struct {
3754
-+	*cascadeDisk
3755
-+}
3756
-+
3757
-+var _ volume.Deleter = &cascadeDiskDeleter{}
3758
-+
3759
-+// NewDeleter returns the deleter associated with the Cascade volume plugin.
3760
-+func (plugin *cascadeDiskPlugin) NewDeleter(spec *volume.Spec) (volume.Deleter, error) {
3761
-+	return plugin.newDeleterInternal(spec, &CascadeDiskUtil{})
3762
-+}
3763
-+
3764
-+func (plugin *cascadeDiskPlugin) newDeleterInternal(spec *volume.Spec, manager diskManager) (volume.Deleter, error) {
3765
-+	if spec.PersistentVolume != nil && spec.PersistentVolume.Spec.CascadeDisk == nil {
3766
-+		return nil, fmt.Errorf("spec.PersistentVolumeSource.CascadeDisk is nil")
3767
-+	}
3768
-+	return &cascadeDiskDeleter{
3769
-+		&cascadeDisk{
3770
-+			volName: spec.Name(),
3771
-+			diskID:  spec.PersistentVolume.Spec.CascadeDisk.DiskID,
3772
-+			manager: manager,
3773
-+			plugin:  plugin,
3774
-+		}}, nil
3775
-+}
3776
-+
3777
-+func (r *cascadeDiskDeleter) Delete() error {
3778
-+	return r.manager.DeleteVolume(r)
3779
-+}
3780
-+
3781
-+type cascadeDiskProvisioner struct {
3782
-+	*cascadeDisk
3783
-+	options volume.VolumeOptions
3784
-+}
3785
-+
3786
-+var _ volume.Provisioner = &cascadeDiskProvisioner{}
3787
-+
3788
-+// NewProvisioner returns the provisioner associated with the Cascade volume plugin.
3789
-+func (plugin *cascadeDiskPlugin) NewProvisioner(options volume.VolumeOptions) (volume.Provisioner, error) {
3790
-+	return plugin.newProvisionerInternal(options, &CascadeDiskUtil{})
3791
-+}
3792
-+
3793
-+func (plugin *cascadeDiskPlugin) newProvisionerInternal(options volume.VolumeOptions,
3794
-+	manager diskManager) (volume.Provisioner, error) {
3795
-+	return &cascadeDiskProvisioner{
3796
-+		cascadeDisk: &cascadeDisk{
3797
-+			manager: manager,
3798
-+			plugin:  plugin,
3799
-+		},
3800
-+		options: options,
3801
-+	}, nil
3802
-+}
3803
-+
3804
-+// Provision provisions the persistent volume by making a CreateDisk call to Cascade Controller.
3805
-+func (p *cascadeDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologies []v1.TopologySelectorTerm) (*v1.PersistentVolume, error) {
3806
-+	if !util.AccessModesContainedInAll(p.plugin.GetAccessModes(), p.options.PVC.Spec.AccessModes) {
3807
-+		return nil, fmt.Errorf("invalid AccessModes %v: only AccessModes %v are supported",
3808
-+			p.options.PVC.Spec.AccessModes, p.plugin.GetAccessModes())
3809
-+	}
3810
-+
3811
-+	diskID, sizeGB, fstype, err := p.manager.CreateVolume(p)
3812
-+	if err != nil {
3813
-+		return nil, err
3814
-+	}
3815
-+
3816
-+	if fstype == "" {
3817
-+		fstype = "ext4"
3818
-+	}
3819
-+
3820
-+	pv := &v1.PersistentVolume{
3821
-+		ObjectMeta: metav1.ObjectMeta{
3822
-+			Name:   p.options.PVName,
3823
-+			Labels: map[string]string{},
3824
-+			Annotations: map[string]string{
3825
-+				util.VolumeDynamicallyCreatedByKey: "vke-volume-dynamic-provisioner",
3826
-+			},
3827
-+		},
3828
-+		Spec: v1.PersistentVolumeSpec{
3829
-+			PersistentVolumeReclaimPolicy: p.options.PersistentVolumeReclaimPolicy,
3830
-+			AccessModes:                   p.options.PVC.Spec.AccessModes,
3831
-+			Capacity: v1.ResourceList{
3832
-+				v1.ResourceName(v1.ResourceStorage): resource.MustParse(fmt.Sprintf("%dGi", sizeGB)),
3833
-+			},
3834
-+			PersistentVolumeSource: v1.PersistentVolumeSource{
3835
-+				CascadeDisk: &v1.CascadeDiskVolumeSource{
3836
-+					DiskID: diskID,
3837
-+					FSType: fstype,
3838
-+				},
3839
-+			},
3840
-+			MountOptions: p.options.MountOptions,
3841
-+		},
3842
-+	}
3843
-+	if len(p.options.PVC.Spec.AccessModes) == 0 {
3844
-+		pv.Spec.AccessModes = p.plugin.GetAccessModes()
3845
-+	}
3846
-+
3847
-+	return pv, nil
3848
-+}
3849
-+
3850
-+func getVolumeSource(spec *volume.Spec) (*v1.CascadeDiskVolumeSource, bool, error) {
3851
-+	if spec.Volume != nil && spec.Volume.CascadeDisk != nil {
3852
-+		return spec.Volume.CascadeDisk, spec.ReadOnly, nil
3853
-+	} else if spec.PersistentVolume != nil && spec.PersistentVolume.Spec.CascadeDisk != nil {
3854
-+		return spec.PersistentVolume.Spec.CascadeDisk, spec.ReadOnly, nil
3855
-+	}
3856
-+
3857
-+	return nil, false, fmt.Errorf("Spec does not reference a Cascade disk type")
3858
-+}
3859
-diff --git a/pkg/volume/cascade_disk/cascade_util.go b/pkg/volume/cascade_disk/cascade_util.go
3860
-new file mode 100644
3861
-index 0000000..e16199c
3862
-+++ b/pkg/volume/cascade_disk/cascade_util.go
3863
-@@ -0,0 +1,162 @@
3864
-+package cascade_disk
3865
-+
3866
-+import (
3867
-+	"fmt"
3868
-+	"strconv"
3869
-+	"strings"
3870
-+	"time"
3871
-+
3872
-+	"github.com/golang/glog"
3873
-+	"k8s.io/api/core/v1"
3874
-+	"k8s.io/kubernetes/pkg/cloudprovider"
3875
-+	"k8s.io/kubernetes/pkg/cloudprovider/providers/cascade"
3876
-+	"k8s.io/kubernetes/pkg/volume"
3877
-+	volumeutil "k8s.io/kubernetes/pkg/volume/util"
3878
-+	"path/filepath"
3879
-+	"os"
3880
-+)
3881
-+
3882
-+const (
3883
-+	checkSleepDuration = time.Second
3884
-+)
3885
-+
3886
-+type CascadeDiskUtil struct{}
3887
-+
3888
-+func verifyDevicePath(path string) (string, error) {
3889
-+	if pathExists, err := volumeutil.PathExists(path); err != nil {
3890
-+		return "", fmt.Errorf("Error checking if path exists: %v", err)
3891
-+	} else if pathExists {
3892
-+		return path, nil
3893
-+	}
3894
-+
3895
-+	glog.V(4).Infof("verifyDevicePath: path does not exist yet")
3896
-+	return "", nil
3897
-+}
3898
-+
3899
-+// Returns path for given VKE disk mount
3900
-+func getDiskByIdPath(devicePath string) string {
3901
-+	nvmePath, err := findNvmeVolume(devicePath)
3902
-+	if err != nil {
3903
-+		glog.Warningf("error looking for nvme volume %q: %v", devicePath, err)
3904
-+	} else if nvmePath != "" {
3905
-+		devicePath = nvmePath
3906
-+	}
3907
-+
3908
-+	return devicePath
3909
-+}
3910
-+
3911
-+// CreateVolume creates a Cascade persistent disk.
3912
-+func (util *CascadeDiskUtil) CreateVolume(p *cascadeDiskProvisioner) (diskID string, capacityGB int, fstype string,
3913
-+	err error) {
3914
-+	cloud, err := getCloudProvider(p.plugin.host.GetCloudProvider())
3915
-+	if err != nil {
3916
-+		glog.Errorf("Cascade Util: CreateVolume failed to get cloud provider. Error [%v]", err)
3917
-+		return "", 0, "", err
3918
-+	}
3919
-+
3920
-+	capacity := p.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)]
3921
-+	volSizeBytes := capacity.Value()
3922
-+	// Cascade works with GB, convert to GB with rounding up
3923
-+	volSizeGB := int(volumeutil.RoundUpSize(volSizeBytes, 1024*1024*1024))
3924
-+	name := volumeutil.GenerateVolumeName(p.options.ClusterName, p.options.PVName, 255)
3925
-+	volumeOptions := &cascade.VolumeOptions{
3926
-+		CapacityGB: volSizeGB,
3927
-+		Tags:       *p.options.CloudTags,
3928
-+		Name:       name,
3929
-+	}
3930
-+
3931
-+	// enabling encryption by default if not provided from within storage class
3932
-+	volumeOptions.Encrypted = true
3933
-+	for parameter, value := range p.options.Parameters {
3934
-+		switch strings.ToLower(parameter) {
3935
-+		case "flavor":
3936
-+			volumeOptions.Flavor = value
3937
-+		case "encrypted":
3938
-+			volumeOptions.Encrypted, err = strconv.ParseBool(value)
3939
-+			if err != nil {
3940
-+				glog.Errorf("Cascade Util: invalid value %q for encryption of volume plugin %s.", value,
3941
-+					p.plugin.GetPluginName())
3942
-+				return "", 0, "", fmt.Errorf("invalid encrypted boolean value %q, must be true or false: %v", value, err)
3943
-+			}
3944
-+		case volume.VolumeParameterFSType:
3945
-+			fstype = value
3946
-+			glog.V(4).Infof("Cascade Util: Setting fstype to %s", fstype)
3947
-+		default:
3948
-+			glog.Errorf("Cascade Util: invalid option %s for volume plugin %s.", parameter,
3949
-+				p.plugin.GetPluginName())
3950
-+			return "", 0, "", fmt.Errorf("Cascade Util: invalid option %s for volume plugin %s.", parameter,
3951
-+				p.plugin.GetPluginName())
3952
-+		}
3953
-+	}
3954
-+
3955
-+	diskID, err = cloud.CreateDisk(volumeOptions)
3956
-+	if err != nil {
3957
-+		glog.Errorf("Cascade Util: failed to CreateDisk. Error [%v]", err)
3958
-+		return "", 0, "", err
3959
-+	}
3960
-+
3961
-+	glog.V(4).Infof("Successfully created Cascade persistent disk %s", name)
3962
-+	return diskID, volSizeGB, "", nil
3963
-+}
3964
-+
3965
-+// DeleteVolume deletes a Cascade volume.
3966
-+func (util *CascadeDiskUtil) DeleteVolume(disk *cascadeDiskDeleter) error {
3967
-+	cloud, err := getCloudProvider(disk.plugin.host.GetCloudProvider())
3968
-+	if err != nil {
3969
-+		glog.Errorf("Cascade Util: DeleteVolume failed to get cloud provider. Error [%v]", err)
3970
-+		return err
3971
-+	}
3972
-+
3973
-+	if err = cloud.DeleteDisk(disk.diskID); err != nil {
3974
-+		glog.Errorf("Cascade Util: failed to DeleteDisk for diskID %s. Error [%v]", disk.diskID, err)
3975
-+		return err
3976
-+	}
3977
-+
3978
-+	glog.V(4).Infof("Successfully deleted Cascade persistent disk %s", disk.diskID)
3979
-+	return nil
3980
-+}
3981
-+
3982
-+func getCloudProvider(cloud cloudprovider.Interface) (*cascade.CascadeCloud, error) {
3983
-+	if cloud == nil {
3984
-+		glog.Errorf("Cascade Util: Cloud provider not initialized properly")
3985
-+		return nil, fmt.Errorf("Cascade Util: Cloud provider not initialized properly")
3986
-+	}
3987
-+
3988
-+	cc := cloud.(*cascade.CascadeCloud)
3989
-+	if cc == nil {
3990
-+		glog.Errorf("Invalid cloud provider: expected Cascade")
3991
-+		return nil, fmt.Errorf("Invalid cloud provider: expected Cascade")
3992
-+	}
3993
-+	return cc, nil
3994
-+}
3995
-+
3996
-+// findNvmeVolume looks for the nvme volume with the specified name
3997
-+// It follows the symlink (if it exists) and returns the absolute path to the device
3998
-+func findNvmeVolume(findName string) (device string, err error) {
3999
-+	stat, err := os.Lstat(findName)
4000
-+	if err != nil {
4001
-+		if os.IsNotExist(err) {
4002
-+			glog.V(6).Infof("nvme path not found %q", findName)
4003
-+			return "", nil
4004
-+		}
4005
-+		return "", fmt.Errorf("error getting stat of %q: %v", findName, err)
4006
-+	}
4007
-+
4008
-+	if stat.Mode()&os.ModeSymlink != os.ModeSymlink {
4009
-+		glog.Warningf("nvme file %q found, but was not a symlink", findName)
4010
-+		return "", nil
4011
-+	}
4012
-+
4013
-+	// Find the target, resolving to an absolute path
4014
-+	// For example, /dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_vol0fab1d5e3f72a5e23 -> ../../nvme2n1
4015
-+	resolved, err := filepath.EvalSymlinks(findName)
4016
-+	if err != nil {
4017
-+		return "", fmt.Errorf("error reading target of symlink %q: %v", findName, err)
4018
-+	}
4019
-+
4020
-+	if !strings.HasPrefix(resolved, "/dev") {
4021
-+		return "", fmt.Errorf("resolved symlink for %q was unexpected: %q", findName, resolved)
4022
-+	}
4023
-+
4024
-+	return resolved, nil
4025
-+}
4026
-diff --git a/plugin/pkg/admission/storage/persistentvolume/label/admission.go b/plugin/pkg/admission/storage/persistentvolume/label/admission.go
4027
-index 19fc962..8c51e38 100644
4028
-+++ b/plugin/pkg/admission/storage/persistentvolume/label/admission.go
4029
-@@ -27,6 +27,7 @@ import (
4030
- 	api "k8s.io/kubernetes/pkg/apis/core"
4031
- 	"k8s.io/kubernetes/pkg/cloudprovider"
4032
- 	"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
4033
-+	"k8s.io/kubernetes/pkg/cloudprovider/providers/cascade"
4034
- 	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
4035
- 	kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
4036
- 	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
4037
-@@ -55,6 +56,7 @@ type persistentVolumeLabel struct {
4038
- 	ebsVolumes       aws.Volumes
4039
- 	cloudConfig      []byte
4040
- 	gceCloudProvider *gce.GCECloud
4041
-+	cascadeDisks     cascade.Disks
4042
- }
4043
- 
4044
- var _ admission.MutationInterface = &persistentVolumeLabel{}
4045
-@@ -107,6 +109,13 @@ func (l *persistentVolumeLabel) Admit(a admission.Attributes) (err error) {
4046
- 		}
4047
- 		volumeLabels = labels
4048
- 	}
4049
-+	if volume.Spec.CascadeDisk != nil {
4050
-+		labels, err := l.findCascadeDiskLabels(volume)
4051
-+		if err != nil {
4052
-+			return admission.NewForbidden(a, fmt.Errorf("error querying Cascade volume %s: %v", volume.Spec.CascadeDisk.DiskID, err))
4053
-+		}
4054
-+		volumeLabels = labels
4055
-+	}
4056
- 
4057
- 	if len(volumeLabels) != 0 {
4058
- 		if volume.Labels == nil {
4059
-@@ -219,3 +228,48 @@ func (l *persistentVolumeLabel) getGCECloudProvider() (*gce.GCECloud, error) {
4060
- 	}
4061
- 	return l.gceCloudProvider, nil
4062
- }
4063
-+
4064
-+func (l *persistentVolumeLabel) findCascadeDiskLabels(volume *api.PersistentVolume) (map[string]string, error) {
4065
-+	// Ignore any volumes that are being provisioned
4066
-+	if volume.Spec.CascadeDisk.DiskID == vol.ProvisionedVolumeName {
4067
-+		return nil, nil
4068
-+	}
4069
-+	cascadeDisks, err := l.getCascadeDisks()
4070
-+	if err != nil {
4071
-+		return nil, err
4072
-+	}
4073
-+	if cascadeDisks == nil {
4074
-+		return nil, fmt.Errorf("unable to build Cascade cloud provider for volumes")
4075
-+	}
4076
-+
4077
-+	labels, err := cascadeDisks.GetVolumeLabels(volume.Spec.CascadeDisk.DiskID)
4078
-+	if err != nil {
4079
-+		return nil, err
4080
-+	}
4081
-+
4082
-+	return labels, nil
4083
-+}
4084
-+
4085
-+// getCascadeDisks returns the Cascade Disks interface
4086
-+func (l *persistentVolumeLabel) getCascadeDisks() (cascade.Disks, error) {
4087
-+	l.mutex.Lock()
4088
-+	defer l.mutex.Unlock()
4089
-+
4090
-+	if l.cascadeDisks == nil {
4091
-+		var cloudConfigReader io.Reader
4092
-+		if len(l.cloudConfig) > 0 {
4093
-+			cloudConfigReader = bytes.NewReader(l.cloudConfig)
4094
-+		}
4095
-+		cloudProvider, err := cloudprovider.GetCloudProvider("vke", cloudConfigReader)
4096
-+		if err != nil || cloudProvider == nil {
4097
-+			return nil, err
4098
-+		}
4099
-+		provider, ok := cloudProvider.(*cascade.CascadeCloud)
4100
-+		if !ok {
4101
-+			// GetCloudProvider has gone very wrong
4102
-+			return nil, fmt.Errorf("error retrieving Cascade cloud provider")
4103
-+		}
4104
-+		l.cascadeDisks = provider
4105
-+	}
4106
-+	return l.cascadeDisks, nil
4107
-+}
4108
-diff --git a/plugin/pkg/admission/vke/BUILD b/plugin/pkg/admission/vke/BUILD
4109
-new file mode 100644
4110
-index 0000000..530877a
4111
-+++ b/plugin/pkg/admission/vke/BUILD
4112
-@@ -0,0 +1,61 @@
4113
-+package(default_visibility = ["//visibility:public"])
4114
-+
4115
-+load(
4116
-+    "@io_bazel_rules_go//go:def.bzl",
4117
-+    "go_library",
4118
-+)
4119
-+
4120
-+go_library(
4121
-+    name = "go_default_library",
4122
-+    srcs = ["admission.go"],
4123
-+    importpath = "k8s.io/kubernetes/plugin/pkg/admission/vke",
4124
-+    deps = [
4125
-+        "//pkg/apis/core:go_default_library",
4126
-+        "//pkg/apis/extensions:go_default_library",
4127
-+        "//pkg/apis/policy/v1beta1:go_default_library",
4128
-+        "//pkg/apis/rbac:go_default_library",
4129
-+        "//pkg/registry/rbac:go_default_library",
4130
-+        "//pkg/security/podsecuritypolicy:go_default_library",
4131
-+        "//vendor/github.com/golang/glog:go_default_library",
4132
-+        "//vendor/k8s.io/api/policy/v1beta1:go_default_library"
4133
-+        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
4134
-+        "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
4135
-+        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
4136
-+        "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
4137
-+        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4138
-+        "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
4139
-+    ],
4140
-+)
4141
-+
4142
-+go_test(
4143
-+    name = "go_default_test",
4144
-+    srcs = ["admission_test.go"],
4145
-+    embed = [":go_default_library"],
4146
-+    deps = [
4147
-+        "//pkg/apis/core:go_default_library",
4148
-+        "//pkg/apis/extensions:go_default_library",
4149
-+        "//pkg/apis/rbac:go_default_library",
4150
-+        "//pkg/registry/rbac:go_default_library",
4151
-+        "//pkg/security/podsecuritypolicy:go_default_library",
4152
-+        "//vendor/github.com/golang/glog:go_default_library",
4153
-+        "//vendor/github.com/stretchr/testify/assert:go_default_library",
4154
-+        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
4155
-+        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
4156
-+        "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
4157
-+        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4158
-+        "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
4159
-+    ],
4160
-+)
4161
-+
4162
-+filegroup(
4163
-+    name = "package-srcs",
4164
-+    srcs = glob(["**"]),
4165
-+    tags = ["automanaged"],
4166
-+    visibility = ["//visibility:private"],
4167
-+)
4168
-+
4169
-+filegroup(
4170
-+    name = "all-srcs",
4171
-+    srcs = [":package-srcs"],
4172
-+    tags = ["automanaged"],
4173
-+)
4174
-\ No newline at end of file
4175
-diff --git a/plugin/pkg/admission/vke/admission.go b/plugin/pkg/admission/vke/admission.go
4176
-new file mode 100644
4177
-index 0000000..53a9d6a
4178
-+++ b/plugin/pkg/admission/vke/admission.go
4179
-@@ -0,0 +1,624 @@
4180
-+package vke
4181
-+
4182
-+import (
4183
-+	"fmt"
4184
-+	"io"
4185
-+	"os"
4186
-+	"strings"
4187
-+
4188
-+	"github.com/golang/glog"
4189
-+	"k8s.io/api/policy/v1beta1"
4190
-+	apiequality "k8s.io/apimachinery/pkg/api/equality"
4191
-+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4192
-+	"k8s.io/apimachinery/pkg/util/validation/field"
4193
-+	"k8s.io/apimachinery/pkg/util/yaml"
4194
-+	"k8s.io/apiserver/pkg/admission"
4195
-+	api "k8s.io/kubernetes/pkg/apis/core"
4196
-+	"k8s.io/kubernetes/pkg/apis/policy"
4197
-+	policybeta "k8s.io/kubernetes/pkg/apis/policy/v1beta1"
4198
-+	"k8s.io/kubernetes/pkg/apis/rbac"
4199
-+	rbacregistry "k8s.io/kubernetes/pkg/registry/rbac"
4200
-+	"k8s.io/kubernetes/pkg/security/podsecuritypolicy"
4201
-+)
4202
-+
4203
-+const (
4204
-+	// PluginName indicates name of admission plugin.
4205
-+	PluginName = "VMwareAdmissionController"
4206
-+
4207
-+	systemNodesGroup         = "system:nodes"
4208
-+	systemMastersGroup       = "system:masters"
4209
-+	systemWorkerGroup        = "system:worker"
4210
-+	privilegedNamespace      = "vke-system"
4211
-+	privilegedServiceAccount = "system:serviceaccount:" + privilegedNamespace + ":"
4212
-+	reservedPrefix           = "vke"
4213
-+	reservedTolerationKey    = "Dedicated"
4214
-+	reservedTolerationValue  = "Master"
4215
-+	masterNodePrefix         = "master"
4216
-+	etcSslCerts              = "/etc/ssl/certs"
4217
-+)
4218
-+
4219
-+// Register registers a plugin.
4220
-+func Register(plugins *admission.Plugins) {
4221
-+	plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) {
4222
-+		return NewVMwareAdmissionController(config)
4223
-+	})
4224
-+}
4225
-+
4226
-+// vmwareAdmissionController is an implementation of admission.Interface.
4227
-+// It restricts access to VKE namespace for users and prevents the users from creating privileged pods.
4228
-+type vmwareAdmissionController struct {
4229
-+	psp             *policy.PodSecurityPolicy
4230
-+	strategyFactory podsecuritypolicy.StrategyFactory
4231
-+	privilegedGroup string
4232
-+	clusterID       string
4233
-+}
4234
-+
4235
-+// vmwareAdmissionControllerConfig holds config data for VMwareAdmissionController.
4236
-+type vmwareAdmissionControllerConfig struct {
4237
-+	ClusterID             string `yaml:"clusterID"`
4238
-+	PrivilegedGroup       string `yaml:"privilegedGroup"`
4239
-+	PodSecurityPolicyFile string `yaml:"podSecurityPolicyFile"`
4240
-+}
4241
-+
4242
-+// AdmissionConfig holds config data for admission controllers.
4243
-+type AdmissionConfig struct {
4244
-+	VMwareAdmissionController vmwareAdmissionControllerConfig `yaml:"vmwareAdmissionController"`
4245
-+}
4246
-+
4247
-+var _ admission.MutationInterface = &vmwareAdmissionController{}
4248
-+
4249
-+// Admit makes an admission decision based on the request attributes.
4250
-+// Note: We implement the mutation interface for this admission controller, which means we have the ability to modify
4251
-+// the resources. But we do not modify them because we just need to validate the requests to either let them through or
4252
-+// block them. We have implemented this as a mutation interface because we need access to oldObjects during update
4253
-+// operations to find out what values are being modified. For node update operation, the old and new objects are always
4254
-+// identical in the validation phase (possibly due to some initializer modifying it). So, we are performing our
4255
-+// validation during the mutation phase.
4256
-+func (vac *vmwareAdmissionController) Admit(a admission.Attributes) (err error) {
4257
-+
4258
-+	if isPrivilegedUser(vac, a) {
4259
-+		return nil
4260
-+	}
4261
-+
4262
-+	if isCertificateFromMaster(a) {
4263
-+		return validateCertificateFromMaster(vac, a)
4264
-+	}
4265
-+
4266
-+	if isCertificateFromWorker(a) {
4267
-+		return validateCertificateFromWorker(a)
4268
-+	}
4269
-+
4270
-+
4271
-+	if isPrivilegedServiceAccount(a) {
4272
-+		return validatePrivilegedServiceAccount(a)
4273
-+	}
4274
-+
4275
-+	if isPrivilegedNamespace(a) {
4276
-+		return admission.NewForbidden(a,
4277
-+			fmt.Errorf("%s validation failed: cannot modify resources in namespace %s", PluginName, a.GetNamespace()))
4278
-+	}
4279
-+
4280
-+	switch a.GetResource().GroupResource() {
4281
-+	case api.Resource("pods"):
4282
-+		err = validatePods(vac, a)
4283
-+	case api.Resource("nodes"):
4284
-+		err = validateNodes(a)
4285
-+	case rbac.Resource("clusterroles"):
4286
-+		err = validateClusterRoles(a)
4287
-+	case rbac.Resource("clusterrolebindings"):
4288
-+		err = validateClusterRoleBindings(a)
4289
-+	}
4290
-+
4291
-+	return err
4292
-+}
4293
-+
4294
-+// Handles returns true if this admission controller can handle the given operation
4295
-+// where operation can be one of CREATE, UPDATE, DELETE, or CONNECT.
4296
-+func (vac *vmwareAdmissionController) Handles(operation admission.Operation) bool {
4297
-+	return true
4298
-+}
4299
-+
4300
-+// NewVMwareAdmissionController creates a new VMwareAdmissionController.
4301
-+func NewVMwareAdmissionController(configFile io.Reader) (*vmwareAdmissionController, error) {
4302
-+	glog.V(2).Infof("%s is enabled", PluginName)
4303
-+	if configFile == nil {
4304
-+		glog.Warningf("No config specified for %s. Using default configuration", PluginName)
4305
-+		return nil, fmt.Errorf("no config file specified for %s", PluginName)
4306
-+	}
4307
-+
4308
-+	var config AdmissionConfig
4309
-+	d := yaml.NewYAMLOrJSONDecoder(configFile, 4096)
4310
-+	err := d.Decode(&config)
4311
-+	if err != nil {
4312
-+		return nil, err
4313
-+	}
4314
-+
4315
-+	// Load PSP from file. If it fails, use default.
4316
-+	psp := getPSPFromFile(config.VMwareAdmissionController.PodSecurityPolicyFile)
4317
-+	if psp == nil {
4318
-+		psp = getDefaultPSP()
4319
-+	}
4320
-+
4321
-+	return &vmwareAdmissionController{
4322
-+		psp:             psp,
4323
-+		strategyFactory: podsecuritypolicy.NewSimpleStrategyFactory(),
4324
-+		privilegedGroup: config.VMwareAdmissionController.PrivilegedGroup,
4325
-+		clusterID:       config.VMwareAdmissionController.ClusterID,
4326
-+	}, nil
4327
-+}
4328
-+
4329
-+func getDefaultPSP() *policy.PodSecurityPolicy {
4330
-+	return &policy.PodSecurityPolicy{
4331
-+		TypeMeta: metav1.TypeMeta{
4332
-+			Kind:       "PodSecurityPolicy",
4333
-+			APIVersion: "policy/v1beta1",
4334
-+		},
4335
-+		Spec: policy.PodSecurityPolicySpec{
4336
-+			Privileged:               false,
4337
-+			HostNetwork:              false,
4338
-+			HostIPC:                  false,
4339
-+			HostPID:                  false,
4340
-+			AllowPrivilegeEscalation: false,
4341
-+			HostPorts: []policy.HostPortRange{
4342
-+				{1, 65535},
4343
-+			},
4344
-+			Volumes: []policy.FSType{
4345
-+				"emptyDir",
4346
-+				"secret",
4347
-+				"downwardAPI",
4348
-+				"configMap",
4349
-+				"persistentVolumeClaim",
4350
-+				"projected",
4351
-+				"hostPath",
4352
-+			},
4353
-+			// We allow /etc/ssl/certs to be mounted in read only mode as a hack to allow Wavefront pods to be deployed.
4354
-+			// TODO(ashokc): Once we have support for users to create pods using privileged mode and host path, remove this.
4355
-+			AllowedHostPaths: []policy.AllowedHostPath{
4356
-+				{
4357
-+					PathPrefix: etcSslCerts,
4358
-+					ReadOnly:   true,
4359
-+				},
4360
-+			},
4361
-+			FSGroup: policy.FSGroupStrategyOptions{
4362
-+				Rule: policy.FSGroupStrategyRunAsAny,
4363
-+			},
4364
-+			RunAsUser: policy.RunAsUserStrategyOptions{
4365
-+				Rule: policy.RunAsUserStrategyRunAsAny,
4366
-+			},
4367
-+			SELinux: policy.SELinuxStrategyOptions{
4368
-+				Rule: policy.SELinuxStrategyRunAsAny,
4369
-+			},
4370
-+			SupplementalGroups: policy.SupplementalGroupsStrategyOptions{
4371
-+				Rule: policy.SupplementalGroupsStrategyRunAsAny,
4372
-+			},
4373
-+		},
4374
-+	}
4375
-+}
4376
-+
4377
-+func getPSPFromFile(pspFile string) *policy.PodSecurityPolicy {
4378
-+	pspBeta := v1beta1.PodSecurityPolicy{}
4379
-+	pspExtensions := policy.PodSecurityPolicy{}
4380
-+
4381
-+	if pspFile == "" {
4382
-+		glog.V(2).Infof("%s: PSP file not specified, using default PSP", PluginName)
4383
-+		return nil
4384
-+	}
4385
-+
4386
-+	pspConfig, err := os.Open(pspFile)
4387
-+	if err != nil {
4388
-+		glog.V(2).Infof("%s: cannot open PSP file, using default PSP: %v", PluginName, err)
4389
-+		return nil
4390
-+	}
4391
-+
4392
-+	// We load the PSP that we read from file into pspBeta because this is the struct to which we can decode yaml to.
4393
-+	d := yaml.NewYAMLOrJSONDecoder(pspConfig, 4096)
4394
-+	err = d.Decode(&pspBeta)
4395
-+	if err != nil {
4396
-+		glog.V(2).Infof("%s: cannot decode PSP file, using default PSP: %v", PluginName, err)
4397
-+		return nil
4398
-+	}
4399
-+
4400
-+	// We convert pspBeta object into pspExtensions object because this is the one that pod validation uses.
4401
-+	err = policybeta.Convert_v1beta1_PodSecurityPolicy_To_policy_PodSecurityPolicy(&pspBeta, &pspExtensions, nil)
4402
-+	if err != nil {
4403
-+		glog.V(2).Infof("%s: cannot convert v1beta1.PSP to extensions.PSP, using default PSP: %v", PluginName, err)
4404
-+		return nil
4405
-+	}
4406
-+
4407
-+	return &pspExtensions
4408
-+}
4409
-+
4410
-+func isPrivilegedUser(vac *vmwareAdmissionController, a admission.Attributes) bool {
4411
-+	// If the request comes from a user belonging to a privileged group, then we allow it. Only calls from Cascade
4412
-+	// controller will belong to this privileged group.
4413
-+	groups := a.GetUserInfo().GetGroups()
4414
-+	for _, group := range groups {
4415
-+		if group == vac.privilegedGroup {
4416
-+			return true
4417
-+		}
4418
-+	}
4419
-+
4420
-+	return false
4421
-+}
4422
-+
4423
-+func isCertificateFromMaster(a admission.Attributes) bool {
4424
-+	groups := a.GetUserInfo().GetGroups()
4425
-+	for _, group := range groups {
4426
-+		if group == systemMastersGroup {
4427
-+			return true
4428
-+		}
4429
-+	}
4430
-+	return false
4431
-+}
4432
-+
4433
-+
4434
-+func validateCertificateFromMaster(vac *vmwareAdmissionController, a admission.Attributes) (err error) {
4435
-+	// kube-controller-manager, kube-scheduler and cloud-init script which creates our pods and other resources can use
4436
-+	// the master certificate to create pods in privileged namespace. If the request comes to any other namespace,
4437
-+	// we need to make it go through our pod validation. This is needed because a user can create a deployment or
4438
-+	// replica set which has a privileged pod. Since our admission controller does not look at deployments or replica
4439
-+	// sets, we will allow it. The actual pod inside the deployment or replica set will be created by the
4440
-+	// controller-manager and if we allow it to create pods in any namespace, then a user can create a privileged pod
4441
-+	// totally bypassing our security checks.
4442
-+	if !isPrivilegedNamespace(a) && (a.GetResource().GroupResource() == api.Resource("pods")) {
4443
-+		return validatePods(vac, a)
4444
-+	}
4445
-+
4446
-+	// For all other resources, allow.
4447
-+	return nil
4448
-+}
4449
-+
4450
-+func isCertificateFromWorker(a admission.Attributes) bool {
4451
-+	groups := a.GetUserInfo().GetGroups()
4452
-+	for _, group := range groups {
4453
-+		if group == systemWorkerGroup {
4454
-+			return true
4455
-+		}
4456
-+	}
4457
-+	return false
4458
-+}
4459
-+
4460
-+
4461
-+func isCreatingPodsThroughControllerManager(resource string) bool {
4462
-+	// If the resource is one of the following, it means the controller manager will create a pod for them and not the
4463
-+	// user directly. So, we need to identify these cases and block them in certain scenarios.
4464
-+	if resource == "deployments" ||
4465
-+		resource == "replicasets" ||
4466
-+		resource == "replicationcontrollers" ||
4467
-+		resource == "statefulsets" ||
4468
-+		resource == "daemonsets" ||
4469
-+		resource == "jobs" ||
4470
-+		resource == "cronjobs" {
4471
-+		return true
4472
-+	}
4473
-+	return false
4474
-+}
4475
-+
4476
-+func validateCertificateFromWorker(a admission.Attributes) error {
4477
-+	// Block exec operations into pods for workers. This is needed to block someone from using Kubelet's certificate to
4478
-+	// exec into privileged pods running on the master. Other operations with the node certificate like modifying master
4479
-+	// node, creating pods on master node, etc. are blocked by the node restriction admission controller.
4480
-+	resource := a.GetResource().GroupResource()
4481
-+	if resource == api.Resource("pods") && a.GetOperation() == admission.Connect {
4482
-+		return admission.NewForbidden(a,
4483
-+			fmt.Errorf("%s validation failed: cannot modify pods in namespace %s", PluginName, a.GetNamespace()))
4484
-+	}
4485
-+
4486
-+	// Block creation of pods indirectly by going through the controller manager.
4487
-+	if isCreatingPodsThroughControllerManager(resource.Resource) {
4488
-+		return admission.NewForbidden(a,
4489
-+			fmt.Errorf("%s validation failed: cannot modify %s in namespace %s", PluginName, resource.Resource, a.GetNamespace()))
4490
-+	}
4491
-+
4492
-+	return nil
4493
-+}
4494
-+
4495
-+func isPrivilegedNamespace(a admission.Attributes) bool {
4496
-+	// If the namespace mentioned in the resource is privileged, return true. We will hit this for calls made to all
4497
-+	// resources in this namespace and during delete and update operation on the namespace itself.
4498
-+	if a.GetNamespace() == privilegedNamespace {
4499
-+		return true
4500
-+	}
4501
-+
4502
-+	// If the resource is a namespace and if its name matched the privileged namespace, return true. We will hit this
4503
-+	// during creation of the namespace.
4504
-+	if a.GetResource().GroupResource() == api.Resource("namespaces") {
4505
-+		if namespace, ok := a.GetObject().(*api.Namespace); ok {
4506
-+			if namespace.Name == privilegedNamespace {
4507
-+				return true
4508
-+			}
4509
-+		}
4510
-+	}
4511
-+
4512
-+	return false
4513
-+}
4514
-+
4515
-+func isPrivilegedServiceAccount(a admission.Attributes) bool {
4516
-+	user := a.GetUserInfo().GetName()
4517
-+	return strings.HasPrefix(user, privilegedServiceAccount)
4518
-+}
4519
-+
4520
-+func validatePrivilegedServiceAccount(a admission.Attributes) error {
4521
-+	// If the privileged service account performs any operation on the pods resource like create, update or connect,
4522
-+	// we block it. This is needed so that we can block exec access into privileged pods running on the master. Also,
4523
-+	// privileged service account does not need to perform these operations. So, just to be extra cautious we also block
4524
-+	// off create and update pods.
4525
-+	resource := a.GetResource().GroupResource()
4526
-+	if resource == api.Resource("pods") {
4527
-+		// Allow Delete operation on pods
4528
-+		if a.GetOperation() == admission.Delete {
4529
-+			return nil
4530
-+		}
4531
-+		// Allow subresources other than exec on pods
4532
-+		if len(a.GetSubresource()) != 0 && a.GetSubresource() != "exec" {
4533
-+			return nil
4534
-+		}
4535
-+		// Block all other operations
4536
-+		if a.GetOperation() == admission.Create || a.GetOperation() == admission.Update || a.GetOperation() == admission.Connect {
4537
-+			return admission.NewForbidden(a,
4538
-+				fmt.Errorf("%s validation failed: cannot modify pods in namespace %s", PluginName, a.GetNamespace()))
4539
-+		}
4540
-+	}
4541
-+
4542
-+	// If the privileged service account tries to update taints on the master node, we block. We need to do this so that
4543
-+	// a user cannot use a privileged service account to untaint the node and run pods on a master.
4544
-+	if resource == api.Resource("nodes") {
4545
-+		if a.GetOperation() == admission.Update && strings.HasPrefix(a.GetName(), masterNodePrefix) {
4546
-+			node, ok := a.GetObject().(*api.Node)
4547
-+			if !ok {
4548
-+				return admission.NewForbidden(a,
4549
-+					fmt.Errorf("%s validation failed: unexpected type %T", PluginName, a.GetObject()))
4550
-+			}
4551
-+			oldNode, ok := a.GetOldObject().(*api.Node)
4552
-+			if !ok {
4553
-+				return admission.NewForbidden(a,
4554
-+					fmt.Errorf("%s validation failed: unexpected type %T", PluginName, a.GetOldObject()))
4555
-+			}
4556
-+
4557
-+			if !apiequality.Semantic.DeepEqual(node.Spec.Taints, oldNode.Spec.Taints) {
4558
-+				return admission.NewForbidden(a,
4559
-+					fmt.Errorf("%s validation failed: cannot modify taints on a node", PluginName))
4560
-+			}
4561
-+		}
4562
-+	}
4563
-+
4564
-+	// Block creation of pods indirectly by going through the controller manager.
4565
-+	if isCreatingPodsThroughControllerManager(resource.Resource) {
4566
-+		return admission.NewForbidden(a,
4567
-+			fmt.Errorf("%s validation failed: cannot modify %s in namespace %s", PluginName, resource.Resource, a.GetNamespace()))
4568
-+	}
4569
-+
4570
-+	return nil
4571
-+}
4572
-+
4573
-+
4574
-+func validateNodes(a admission.Attributes) error {
4575
-+	// If it is a connect operation on the sub resource, allow it. Sub resources of nodes are nodes/nodename/proxy and
4576
-+	// nodes/nodename/status. Prometheus needs read access to nodes/nodename/proxy/metrics. To support that and other
4577
-+	// pods which might need read access to node metrics, we need to allow this. But the VKE authorizer blocks off any
4578
-+	// access to perform exec, attach or run on the proxy resource on a master which will prevent the users from getting
4579
-+	// access to the privileged pods on master.
4580
-+	if a.GetOperation() == admission.Connect && len(a.GetSubresource()) != 0 {
4581
-+		return nil
4582
-+	}
4583
-+
4584
-+	// If the operation is Delete, fail. Deleting a node is not something that is useful to the user. Also, by deleting
4585
-+	// a node, they can potentially make their cluster useless.
4586
-+	if a.GetOperation() == admission.Delete {
4587
-+		return admission.NewForbidden(a, fmt.Errorf("%s validation failed: cannot delete nodes", PluginName))
4588
-+	}
4589
-+
4590
-+	// If the operation is on a master node, fail. We do not want to allow the users to modify labels and taints on the
4591
-+	// master node because it can compromise the security of the cluster.
4592
-+	if strings.HasPrefix(a.GetName(), masterNodePrefix) {
4593
-+		return admission.NewForbidden(a, fmt.Errorf("%s validation failed: cannot modify master nodes", PluginName))
4594
-+	}
4595
-+
4596
-+	return nil
4597
-+}
4598
-+
4599
-+func validateClusterRoles(a admission.Attributes) error {
4600
-+	// If the name in the request is not empty and has the reserved prefix, then fail. We will hit this during delete
4601
-+	// and update operations on the cluster roles. If it does not have the reserved prefix, allow it. If the name is
4602
-+	// empty then proceed to read it from the object in the request.
4603
-+	if a.GetName() != "" {
4604
-+		return checkReservedPrefix(a.GetName(), a)
4605
-+	}
4606
-+
4607
-+	clusterRole, ok := a.GetObject().(*rbac.ClusterRole)
4608
-+	// If we cannot get the cluster role binding object, fail.
4609
-+	if !ok {
4610
-+		return admission.NewForbidden(a,
4611
-+			fmt.Errorf("%s validation failed: unexpected type %T", PluginName, a.GetObject()))
4612
-+	}
4613
-+	// If we get the object and the name has the reserved prefix, fail. We will hit this when someone tries to create a
4614
-+	// cluster role with the reserved prefix.
4615
-+	return checkReservedPrefix(clusterRole.Name, a)
4616
-+}
4617
-+
4618
-+func validateClusterRoleBindings(a admission.Attributes) error {
4619
-+	// If the name in the request is not empty and has the reserved prefix, then fail. We will hit this during delete
4620
-+	// and update operations on the cluster role bindings. If it does not have the reserved prefix, allow it. If the
4621
-+	// name is empty then proceed to read it from the object in the request.
4622
-+	if a.GetName() != "" {
4623
-+		return checkReservedPrefix(a.GetName(), a)
4624
-+	}
4625
-+
4626
-+	clusterRoleBinding, ok := a.GetObject().(*rbac.ClusterRoleBinding)
4627
-+	// If we cannot get the cluster role binding object, fail.
4628
-+	if !ok {
4629
-+		return admission.NewForbidden(a,
4630
-+			fmt.Errorf("%s validation failed: unexpected type %T", PluginName, a.GetObject()))
4631
-+	}
4632
-+	// If we get the object and the name has the reserved prefix, fail. We will hit this when someone tries to create a
4633
-+	// cluster role binding with the reserved prefix.
4634
-+	return checkReservedPrefix(clusterRoleBinding.Name, a)
4635
-+}
4636
-+
4637
-+func validatePods(vac *vmwareAdmissionController, a admission.Attributes) error {
4638
-+	// If the request is acting on a sub resource of a pod then allow it. This request is not directly coming to a pod,
4639
-+	// but to a sub-resource like pods/foo/status. So, this does not have to be blocked.
4640
-+	if len(a.GetSubresource()) != 0 {
4641
-+		return nil
4642
-+	}
4643
-+
4644
-+	// If it is a Connect or Delete operation, allow it. We restrict access to connect to any pods in the vke-system
4645
-+	// namespace. So it is OK to allow this.
4646
-+	if a.GetOperation() == admission.Connect || a.GetOperation() == admission.Delete {
4647
-+		return nil
4648
-+	}
4649
-+
4650
-+	// If we cannot get the pod object, fail.
4651
-+	if _, ok := a.GetObject().(*api.Pod); !ok {
4652
-+		return admission.NewForbidden(a,
4653
-+			fmt.Errorf("%s validation failed: unexpected type %T", PluginName, a.GetObject()))
4654
-+	}
4655
-+
4656
-+	// If this is an update, see if we are only updating the ownerRef/finalizers.  Garbage collection does this
4657
-+	// and we should allow it in general, since you had the power to update and the power to delete.
4658
-+	// The worst that happens is that you delete something, but you aren't controlling the privileged object itself
4659
-+	if a.GetOperation() == admission.Update &&
4660
-+		rbacregistry.IsOnlyMutatingGCFields(a.GetObject(), a.GetOldObject(), apiequality.Semantic) {
4661
-+		return nil
4662
-+	}
4663
-+
4664
-+	errs := field.ErrorList{}
4665
-+	originalPod := a.GetObject().(*api.Pod)
4666
-+
4667
-+	// Generate a copy of the pod object because we are not allowed to mutate the pod object.
4668
-+	pod := originalPod.DeepCopy()
4669
-+
4670
-+	provider, err := podsecuritypolicy.NewSimpleProvider(vac.psp, pod.Namespace, vac.strategyFactory)
4671
-+	if err != nil {
4672
-+		return admission.NewForbidden(a, fmt.Errorf("%s validation failed: %v", PluginName, err))
4673
-+	}
4674
-+
4675
-+	// Set default security context for the pod. This fills in the defaults for the security context values that are not
4676
-+	// provided. This is needed to validate the security context correctly.
4677
-+	err = provider.DefaultPodSecurityContext(pod)
4678
-+	if err != nil {
4679
-+		errs = append(errs, field.Invalid(field.NewPath("spec", "securityContext"),
4680
-+			pod.Spec.SecurityContext, err.Error()))
4681
-+	}
4682
-+
4683
-+	// Validate the pod.
4684
-+	errs = append(errs, provider.ValidatePod(pod, field.NewPath("spec", "securityContext"))...)
4685
-+
4686
-+	// Validate the pod's tolerations.
4687
-+	fieldErr := validatePodToleration(pod)
4688
-+	if fieldErr != nil {
4689
-+		errs = append(errs, fieldErr)
4690
-+	}
4691
-+
4692
-+	// Validate the initContainers that are part of the pod.
4693
-+	for i := range pod.Spec.InitContainers {
4694
-+		err := provider.DefaultContainerSecurityContext(pod, &pod.Spec.InitContainers[i])
4695
-+		if err != nil {
4696
-+			errs = append(errs, field.Invalid(field.NewPath("spec", "initContainers").Index(i).
4697
-+				Child("securityContext"), "", err.Error()))
4698
-+			continue
4699
-+		}
4700
-+		errs = append(errs, provider.ValidateContainerSecurityContext(pod, &pod.Spec.InitContainers[i],
4701
-+			field.NewPath("spec", "initContainers").Index(i).Child("securityContext"))...)
4702
-+	}
4703
-+
4704
-+	// Validate the containers that are part of the pod.
4705
-+	for i := range pod.Spec.Containers {
4706
-+		err := provider.DefaultContainerSecurityContext(pod, &pod.Spec.Containers[i])
4707
-+		if err != nil {
4708
-+			errs = append(errs, field.Invalid(field.NewPath("spec", "containers").Index(i).
4709
-+				Child("securityContext"), "", err.Error()))
4710
-+			continue
4711
-+		}
4712
-+		errs = append(errs, provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[i],
4713
-+			field.NewPath("spec", "containers").Index(i).Child("securityContext"))...)
4714
-+	}
4715
-+
4716
-+	// Validate that /etc/ssl/certs if mounted using hostPath volume mount is readOnly.
4717
-+	fieldErr = validateEtcSslCertsHostPath(pod)
4718
-+	if fieldErr != nil {
4719
-+		errs = append(errs, fieldErr)
4720
-+	}
4721
-+
4722
-+	if len(errs) > 0 {
4723
-+		return admission.NewForbidden(a,
4724
-+			fmt.Errorf("%s validation failed: %v", PluginName, errs))
4725
-+	}
4726
-+
4727
-+	return nil
4728
-+}
4729
-+
4730
-+func validatePodToleration(pod *api.Pod) *field.Error {
4731
-+	// Master nodes are tainted with "Dedicated=Master:NoSchedule". Only vke-system pods are allowed to tolerate
4732
-+	// this taint and to run on master nodes. A user's pod will be rejected if its spec has toleration for this taint.
4733
-+	for _, t := range pod.Spec.Tolerations {
4734
-+		reject := false
4735
-+
4736
-+		if t.Key == reservedTolerationKey && t.Value == reservedTolerationValue {
4737
-+			// Reject pod that has the reserved toleration "Dedicated=Master"
4738
-+			reject = true
4739
-+		} else if t.Operator == api.TolerationOpExists && (t.Key == reservedTolerationKey || t.Key == "") {
4740
-+			// Reject pod that has wildcard toleration matching the reserved toleration
4741
-+			reject = true
4742
-+		}
4743
-+
4744
-+		if reject {
4745
-+			return field.Invalid(field.NewPath("spec", "toleration"), fmt.Sprintf("%+v", t),
4746
-+				fmt.Sprintf("%s validation failed: should not tolerate master node taint", PluginName))
4747
-+		}
4748
-+	}
4749
-+	return nil
4750
-+}
4751
-+
4752
-+// Validate that /etc/ssl/certs if mounted using hostPath volume mount is readOnly. If not, fail.
4753
-+// This is a hack that is needed to get Wavefront pods to work.
4754
-+// TODO(ashokc): Once we have support for users to create pods using privileged mode and host path, remove this.
4755
-+func validateEtcSslCertsHostPath(pod *api.Pod) *field.Error {
4756
-+	// Get volumes which mount /etc/ssl/certs and put them in a map.
4757
-+	volumes := map[string]struct{}{}
4758
-+	for _, vol := range pod.Spec.Volumes {
4759
-+		if vol.HostPath != nil && strings.HasPrefix(vol.HostPath.Path, etcSslCerts) {
4760
-+			volumes[vol.Name] = struct{}{}
4761
-+		}
4762
-+	}
4763
-+
4764
-+	// For every initContainer, get all volumeMounts and verify if it matches any of the volumes in the volumes map.
4765
-+	// If yes, then check if they are read only. If not, return an error.
4766
-+	err := checkVolumeReadOnly(pod.Spec.InitContainers, volumes, "initContainers")
4767
-+	if err != nil {
4768
-+		return err
4769
-+	}
4770
-+
4771
-+	// For every container, get all volumeMounts and verify if it matches any of the volumes in the volumes map.
4772
-+	// If yes, then check if they are read only. If not, return an error.
4773
-+	err = checkVolumeReadOnly(pod.Spec.Containers, volumes, "containers")
4774
-+	if err != nil {
4775
-+		return err
4776
-+	}
4777
-+
4778
-+	return nil
4779
-+}
4780
-+
4781
-+// Checks if the container has a volumeMount belonging to the volumes map. If yes, it has to be read only. If not,
4782
-+// return error.
4783
-+func checkVolumeReadOnly(containers []api.Container, volumes map[string]struct{}, containerType string) *field.Error {
4784
-+	for i, container := range containers {
4785
-+		for _, vol := range container.VolumeMounts {
4786
-+			if _, ok := volumes[vol.Name]; ok {
4787
-+				if !vol.ReadOnly {
4788
-+					return field.Invalid(field.NewPath("spec", containerType).Index(i).Child("volumeMounts"),
4789
-+						fmt.Sprintf("%+v", vol), fmt.Sprintf("%s has to be mount as readOnly", etcSslCerts))
4790
-+				}
4791
-+			}
4792
-+		}
4793
-+	}
4794
-+	return nil
4795
-+}
4796
-+
4797
-+func checkReservedPrefix(resourceName string, a admission.Attributes) error {
4798
-+	if strings.HasPrefix(resourceName, reservedPrefix) {
4799
-+		return admission.NewForbidden(a,
4800
-+			fmt.Errorf("%s validation failed: cannot modify resources with prefix %s", PluginName, reservedPrefix))
4801
-+	}
4802
-+	return nil
4803
-+}
4804
-diff --git a/plugin/pkg/admission/vke/admission_test.go b/plugin/pkg/admission/vke/admission_test.go
4805
-new file mode 100644
4806
-index 0000000..3486f10
4807
-+++ b/plugin/pkg/admission/vke/admission_test.go
4808
-@@ -0,0 +1,960 @@
4809
-+package vke
4810
-+
4811
-+import (
4812
-+	"fmt"
4813
-+	"os"
4814
-+	"strings"
4815
-+	"testing"
4816
-+
4817
-+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4818
-+	"k8s.io/apimachinery/pkg/runtime"
4819
-+	kadmission "k8s.io/apiserver/pkg/admission"
4820
-+	kapi "k8s.io/kubernetes/pkg/apis/core"
4821
-+	"k8s.io/kubernetes/pkg/apis/rbac"
4822
-+	"k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/user"
4823
-+)
4824
-+
4825
-+const (
4826
-+	testServiceAccountsGroup = "system.test\\cascade-controller-service-accounts"
4827
-+	clusterID                = "cluster-id"
4828
-+	defaultConfigFileFormat  = `
4829
-+vmwareAdmissionController:
4830
-+  privilegedGroup: %s
4831
-+  podSecurityPolicyFile: %s
4832
-+  clusterID: %s
4833
-+`
4834
-+	pspFileName   = "/tmp/psp.yaml"
4835
-+	pspConfigFile = `
4836
-+apiVersion: extensions/v1beta1
4837
-+kind: PodSecurityPolicy
4838
-+metadata:
4839
-+  name: vmware-pod-security-policy-restricted
4840
-+spec:
4841
-+  privileged: true
4842
-+  fsGroup:
4843
-+    rule: RunAsAny
4844
-+  runAsUser:
4845
-+    rule: RunAsAny
4846
-+  seLinux:
4847
-+    rule: RunAsAny
4848
-+  supplementalGroups:
4849
-+    rule: RunAsAny
4850
-+  volumes:
4851
-+  - 'emptyDir'
4852
-+  - 'secret'
4853
-+  - 'downwardAPI'
4854
-+  - 'configMap'
4855
-+  - 'persistentVolumeClaim'
4856
-+  - 'projected'
4857
-+  - 'hostPath'
4858
-+  hostPID: false
4859
-+  hostIPC: false
4860
-+  hostNetwork: true
4861
-+  hostPorts:
4862
-+  - min: 1
4863
-+    max: 65536
4864
-+`
4865
-+)
4866
-+
4867
-+func TestAdmitPrivileged(t *testing.T) {
4868
-+	tests := map[string]struct {
4869
-+		operation          kadmission.Operation
4870
-+		pod                *kapi.Pod
4871
-+		name               string
4872
-+		userInfo           user.Info
4873
-+		shouldPassValidate bool
4874
-+	}{
4875
-+		"create pod with Privileged=nil allowed": {
4876
-+			operation:          kadmission.Create,
4877
-+			pod:                newTestPodBuilder().build(),
4878
-+			userInfo:           newTestUserBuilder().build(),
4879
-+			shouldPassValidate: true,
4880
-+		},
4881
-+		"create pod with Privileged=false allowed": {
4882
-+			operation:          kadmission.Create,
4883
-+			pod:                newTestPodBuilder().withPrivileged(false).build(),
4884
-+			userInfo:           newTestUserBuilder().build(),
4885
-+			shouldPassValidate: true,
4886
-+		},
4887
-+		"create pod with Privileged=true denied": {
4888
-+			operation:          kadmission.Create,
4889
-+			pod:                newTestPodBuilder().withPrivileged(true).build(),
4890
-+			userInfo:           newTestUserBuilder().build(),
4891
-+			shouldPassValidate: false,
4892
-+		},
4893
-+		"create pod with multiple containers, one has Privileged=true denied": {
4894
-+			operation:          kadmission.Create,
4895
-+			pod:                newTestPodBuilder().withPrivileged(true).withInitContainer().withContainer().build(),
4896
-+			userInfo:           newTestUserBuilder().build(),
4897
-+			shouldPassValidate: false,
4898
-+		},
4899
-+		"update pod with Privileged=true denied": {
4900
-+			operation:          kadmission.Update,
4901
-+			pod:                newTestPodBuilder().withPrivileged(true).build(),
4902
-+			userInfo:           newTestUserBuilder().build(),
4903
-+			shouldPassValidate: false,
4904
-+		},
4905
-+		"create pod with HostNetwork=true denied": {
4906
-+			operation:          kadmission.Create,
4907
-+			pod:                newTestPodBuilder().withHostNetwork(true).build(),
4908
-+			userInfo:           newTestUserBuilder().build(),
4909
-+			shouldPassValidate: false,
4910
-+		},
4911
-+		"create pod with HostIPC=true denied": {
4912
-+			operation:          kadmission.Create,
4913
-+			pod:                newTestPodBuilder().withHostIPC(true).build(),
4914
-+			userInfo:           newTestUserBuilder().build(),
4915
-+			shouldPassValidate: false,
4916
-+		},
4917
-+		"create pod with HostPID=true denied": {
4918
-+			operation:          kadmission.Create,
4919
-+			pod:                newTestPodBuilder().withHostPID(true).build(),
4920
-+			userInfo:           newTestUserBuilder().build(),
4921
-+			shouldPassValidate: false,
4922
-+		},
4923
-+		"create pod with HostPort allowed": {
4924
-+			operation:          kadmission.Create,
4925
-+			pod:                newTestPodBuilder().withHostPort().build(),
4926
-+			userInfo:           newTestUserBuilder().build(),
4927
-+			shouldPassValidate: true,
4928
-+		},
4929
-+		"create pod with HostVolume denied": {
4930
-+			operation:          kadmission.Create,
4931
-+			pod:                newTestPodBuilder().withHostVolume("/", false).build(),
4932
-+			userInfo:           newTestUserBuilder().build(),
4933
-+			shouldPassValidate: false,
4934
-+		},
4935
-+		"create pod with HostVolume /etc/ssl/certs in read-only mode allowed": {
4936
-+			operation:          kadmission.Create,
4937
-+			pod:                newTestPodBuilder().withHostVolume("/etc/ssl/certs", true).build(),
4938
-+			userInfo:           newTestUserBuilder().build(),
4939
-+			shouldPassValidate: true,
4940
-+		},
4941
-+		"create pod with HostVolume /etc/ssl/certs in read-write mode denied": {
4942
-+			operation:          kadmission.Create,
4943
-+			pod:                newTestPodBuilder().withHostVolume("/etc/ssl/certs", false).build(),
4944
-+			userInfo:           newTestUserBuilder().build(),
4945
-+			shouldPassValidate: false,
4946
-+		},
4947
-+		"create pod with CascadeDisk allowed": {
4948
-+			operation:          kadmission.Create,
4949
-+			pod:                newTestPodBuilder().withCascadeDisk().build(),
4950
-+			userInfo:           newTestUserBuilder().build(),
4951
-+			shouldPassValidate: true,
4952
-+		},
4953
-+		"create pod with HostVolume and CascadeDisk denied": {
4954
-+			operation:          kadmission.Create,
4955
-+			pod:                newTestPodBuilder().withHostVolume("/", false).withCascadeDisk().build(),
4956
-+			userInfo:           newTestUserBuilder().build(),
4957
-+			shouldPassValidate: false,
4958
-+		},
4959
-+		"connect pod allowed": {
4960
-+			operation:          kadmission.Connect,
4961
-+			pod:                newTestPodBuilder().build(),
4962
-+			userInfo:           newTestUserBuilder().build(),
4963
-+			shouldPassValidate: true,
4964
-+		},
4965
-+		"delete pod allowed": {
4966
-+			operation:          kadmission.Delete,
4967
-+			pod:                nil,
4968
-+			userInfo:           newTestUserBuilder().build(),
4969
-+			shouldPassValidate: true,
4970
-+		},
4971
-+	}
4972
-+
4973
-+	for k, v := range tests {
4974
-+		testPodValidation(k, v.operation, v.pod, v.name, v.userInfo, v.shouldPassValidate, t)
4975
-+	}
4976
-+}
4977
-+
4978
-+func TestAdmitPrivilegedWithCustomPSP(t *testing.T) {
4979
-+	tests := map[string]struct {
4980
-+		operation          kadmission.Operation
4981
-+		pod                *kapi.Pod
4982
-+		name               string
4983
-+		userInfo           user.Info
4984
-+		shouldPassValidate bool
4985
-+	}{
4986
-+		"create pod with Privileged=nil allowed": {
4987
-+			operation:          kadmission.Create,
4988
-+			pod:                newTestPodBuilder().build(),
4989
-+			userInfo:           newTestUserBuilder().build(),
4990
-+			shouldPassValidate: true,
4991
-+		},
4992
-+		"create pod with Privileged=false allowed": {
4993
-+			operation:          kadmission.Create,
4994
-+			pod:                newTestPodBuilder().withPrivileged(false).build(),
4995
-+			userInfo:           newTestUserBuilder().build(),
4996
-+			shouldPassValidate: true,
4997
-+		},
4998
-+		"create pod with Privileged=true allowed": {
4999
-+			operation:          kadmission.Create,
5000
-+			pod:                newTestPodBuilder().withPrivileged(true).build(),
5001
-+			userInfo:           newTestUserBuilder().build(),
5002
-+			shouldPassValidate: true,
5003
-+		},
5004
-+		"create pod with multiple containers, one has Privileged=true allowed": {
5005
-+			operation:          kadmission.Create,
5006
-+			pod:                newTestPodBuilder().withPrivileged(true).withInitContainer().withContainer().build(),
5007
-+			userInfo:           newTestUserBuilder().build(),
5008
-+			shouldPassValidate: true,
5009
-+		},
5010
-+		"update pod with Privileged=true allowed": {
5011
-+			operation:          kadmission.Update,
5012
-+			pod:                newTestPodBuilder().withPrivileged(true).build(),
5013
-+			userInfo:           newTestUserBuilder().build(),
5014
-+			shouldPassValidate: true,
5015
-+		},
5016
-+		"create pod with HostNetwork=true allowed": {
5017
-+			operation:          kadmission.Create,
5018
-+			pod:                newTestPodBuilder().withHostNetwork(true).build(),
5019
-+			userInfo:           newTestUserBuilder().build(),
5020
-+			shouldPassValidate: true,
5021
-+		},
5022
-+		"create pod with HostIPC=true denied": {
5023
-+			operation:          kadmission.Create,
5024
-+			pod:                newTestPodBuilder().withHostIPC(true).build(),
5025
-+			userInfo:           newTestUserBuilder().build(),
5026
-+			shouldPassValidate: false,
5027
-+		},
5028
-+		"create pod with HostPID=true denied": {
5029
-+			operation:          kadmission.Create,
5030
-+			pod:                newTestPodBuilder().withHostPID(true).build(),
5031
-+			userInfo:           newTestUserBuilder().build(),
5032
-+			shouldPassValidate: false,
5033
-+		},
5034
-+		"create pod with HostPort allowed": {
5035
-+			operation:          kadmission.Create,
5036
-+			pod:                newTestPodBuilder().withHostPort().build(),
5037
-+			userInfo:           newTestUserBuilder().build(),
5038
-+			shouldPassValidate: true,
5039
-+		},
5040
-+		"create pod with HostVolume allowed": {
5041
-+			operation:          kadmission.Create,
5042
-+			pod:                newTestPodBuilder().withHostVolume("/", false).build(),
5043
-+			userInfo:           newTestUserBuilder().build(),
5044
-+			shouldPassValidate: true,
5045
-+		},
5046
-+		"create pod with HostVolume /etc/ssl/certs in read-only mode allowed": {
5047
-+			operation:          kadmission.Create,
5048
-+			pod:                newTestPodBuilder().withHostVolume("/etc/ssl/certs", true).build(),
5049
-+			userInfo:           newTestUserBuilder().build(),
5050
-+			shouldPassValidate: true,
5051
-+		},
5052
-+		"create pod with HostVolume /etc/ssl/certs in read-write mode denied": {
5053
-+			operation:          kadmission.Create,
5054
-+			pod:                newTestPodBuilder().withHostVolume("/etc/ssl/certs", false).build(),
5055
-+			userInfo:           newTestUserBuilder().build(),
5056
-+			shouldPassValidate: false,
5057
-+		},
5058
-+		"create pod with CascadeDisk allowed": {
5059
-+			operation:          kadmission.Create,
5060
-+			pod:                newTestPodBuilder().withCascadeDisk().build(),
5061
-+			userInfo:           newTestUserBuilder().build(),
5062
-+			shouldPassValidate: true,
5063
-+		},
5064
-+		"create pod with HostVolume and CascadeDisk allowed": {
5065
-+			operation:          kadmission.Create,
5066
-+			pod:                newTestPodBuilder().withHostVolume("/", false).withCascadeDisk().build(),
5067
-+			userInfo:           newTestUserBuilder().build(),
5068
-+			shouldPassValidate: true,
5069
-+		},
5070
-+		"connect pod allowed": {
5071
-+			operation:          kadmission.Connect,
5072
-+			pod:                newTestPodBuilder().build(),
5073
-+			userInfo:           newTestUserBuilder().build(),
5074
-+			shouldPassValidate: true,
5075
-+		},
5076
-+		"delete pod allowed": {
5077
-+			operation:          kadmission.Delete,
5078
-+			pod:                nil,
5079
-+			userInfo:           newTestUserBuilder().build(),
5080
-+			shouldPassValidate: true,
5081
-+		},
5082
-+	}
5083
-+
5084
-+	// Setup custom PSP file.
5085
-+	file, err := os.Create(pspFileName)
5086
-+	if err != nil {
5087
-+		t.Errorf("TestAdmitPrivilegedWithCustomPSP: failed to open custom PSP file %v", err)
5088
-+		return
5089
-+	}
5090
-+	_, err = file.WriteString(pspConfigFile)
5091
-+	if err != nil {
5092
-+		t.Errorf("TestAdmitPrivilegedWithCustomPSP: failed to write to custom PSP file %v", err)
5093
-+		return
5094
-+	}
5095
-+
5096
-+	for k, v := range tests {
5097
-+		testPodValidation(k, v.operation, v.pod, v.name, v.userInfo, v.shouldPassValidate, t)
5098
-+	}
5099
-+
5100
-+	// Delete custom PSP file.
5101
-+	err = os.Remove(pspFileName)
5102
-+	if err != nil {
5103
-+		t.Errorf("TestAdmitPrivilegedWithCustomPSP: failed to delete custom PSP file %v", err)
5104
-+	}
5105
-+}
5106
-+
5107
-+func TestPrivilegedNamespace(t *testing.T) {
5108
-+	tests := map[string]struct {
5109
-+		operation          kadmission.Operation
5110
-+		pod                *kapi.Pod
5111
-+		name               string
5112
-+		userInfo           user.Info
5113
-+		shouldPassValidate bool
5114
-+	}{
5115
-+		"denied: regular lightwave user creates pod in vke-system namespace": {
5116
-+			operation:          kadmission.Create,
5117
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5118
-+			userInfo:           newTestUserBuilder().build(),
5119
-+			shouldPassValidate: false,
5120
-+		},
5121
-+		"denied: regular lightwave user cannot escalate privilege using service account": {
5122
-+			operation:          kadmission.Create,
5123
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).withServiceAccount(privilegedServiceAccount + "default").build(),			userInfo:           newTestUserBuilder().build(),
5124
-+			shouldPassValidate: false,
5125
-+		},
5126
-+		"denied: regular service account creates pod in vke-system namespace": {
5127
-+			operation:          kadmission.Create,
5128
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5129
-+			userInfo:           newTestUserBuilder().withName("system:serviceaccount:kube-system:default").build(),
5130
-+			shouldPassValidate: false,
5131
-+		},
5132
-+		"allowed: privileged service account deletes a pod in privileged namespace": {
5133
-+			operation:          kadmission.Delete,
5134
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5135
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5136
-+			shouldPassValidate: true,
5137
-+		},
5138
-+		"denied: privileged service account creates a pod in privileged namespace": {
5139
-+			operation:          kadmission.Create,
5140
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5141
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5142
-+			shouldPassValidate: false,
5143
-+		},
5144
-+		"denied: privileged service account execs into a pod in privileged namespace": {
5145
-+			operation:          kadmission.Connect,
5146
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5147
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5148
-+			shouldPassValidate: false,
5149
-+		},
5150
-+		"denied: privileged service account updates a pod in privileged namespace": {
5151
-+			operation:          kadmission.Update,
5152
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5153
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5154
-+			shouldPassValidate: false,
5155
-+		},
5156
-+		"allowed: regular user creates pod in other namespace": {
5157
-+			operation:          kadmission.Create,
5158
-+			pod:                newTestPodBuilder().withNamespace("default").build(),
5159
-+			userInfo:           newTestUserBuilder().build(),
5160
-+			shouldPassValidate: true,
5161
-+		},
5162
-+		"allowed: Cascade Controller Service Account creates pod in vke-system namespace": {
5163
-+			operation:          kadmission.Create,
5164
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5165
-+			userInfo:           newTestUserBuilder().withGroup(testServiceAccountsGroup).build(),
5166
-+			shouldPassValidate: true,
5167
-+		},
5168
-+		"allowed: systemMasters group creates pod in vke-system namespace": {
5169
-+			operation:          kadmission.Create,
5170
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5171
-+			userInfo:           newTestUserBuilder().withGroup(systemMastersGroup).build(),
5172
-+			shouldPassValidate: true,
5173
-+		},
5174
-+		"denied: regular lightwave group does not grant privileged access": {
5175
-+			operation:          kadmission.Create,
5176
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5177
-+			userInfo:           newTestUserBuilder().withGroup("test1\\group1").build(),
5178
-+			shouldPassValidate: false,
5179
-+		},
5180
-+		"allowed: if user has multiple groups, any privileged group can grant privileged access": {
5181
-+			operation:          kadmission.Create,
5182
-+			pod:                newTestPodBuilder().withNamespace(privilegedNamespace).build(),
5183
-+			userInfo:           newTestUserBuilder().withGroup("test1\\group1").withGroup(testServiceAccountsGroup).build(),
5184
-+			shouldPassValidate: true,
5185
-+		},
5186
-+		"denied: worker kubelet exec into pod": {
5187
-+			operation:          kadmission.Connect,
5188
-+			pod:                newTestPodBuilder().build(),
5189
-+			userInfo:           newTestUserBuilder().withGroup("system:worker").build(),
5190
-+			shouldPassValidate: false,
5191
-+		},
5192
-+	}
5193
-+	for k, v := range tests {
5194
-+		testPodValidation(k, v.operation, v.pod, v.name, v.userInfo, v.shouldPassValidate, t)
5195
-+	}
5196
-+}
5197
-+
5198
-+func TestToleration(t *testing.T) {
5199
-+	tests := map[string]struct {
5200
-+		operation          kadmission.Operation
5201
-+		pod                *kapi.Pod
5202
-+		name               string
5203
-+		userInfo           user.Info
5204
-+		shouldPassValidate bool
5205
-+	}{
5206
-+		"allowed: create pod with no toleration": {
5207
-+			operation:          kadmission.Create,
5208
-+			pod:                newTestPodBuilder().build(),
5209
-+			userInfo:           newTestUserBuilder().build(),
5210
-+			shouldPassValidate: true,
5211
-+		},
5212
-+		"allowed: create pod with normal toleration key": {
5213
-+			operation:          kadmission.Create,
5214
-+			pod:                newTestPodBuilder().withToleration("mykey", reservedTolerationValue, kapi.TolerationOpEqual, kapi.TaintEffectNoSchedule).build(),
5215
-+			userInfo:           newTestUserBuilder().build(),
5216
-+			shouldPassValidate: true,
5217
-+		},
5218
-+		"allowed: create pod with normal toleration value": {
5219
-+			operation:          kadmission.Create,
5220
-+			pod:                newTestPodBuilder().withToleration(reservedTolerationKey, "myval", kapi.TolerationOpEqual, kapi.TaintEffectNoSchedule).build(),
5221
-+			userInfo:           newTestUserBuilder().build(),
5222
-+			shouldPassValidate: true,
5223
-+		},
5224
-+		"denied: create pod with reserved toleration": {
5225
-+			operation:          kadmission.Create,
5226
-+			pod:                newTestPodBuilder().withToleration(reservedTolerationKey, reservedTolerationValue, kapi.TolerationOpEqual, kapi.TaintEffectNoSchedule).build(),
5227
-+			userInfo:           newTestUserBuilder().build(),
5228
-+			shouldPassValidate: false,
5229
-+		},
5230
-+		"denied: create pod with wildcard toleration": {
5231
-+			operation:          kadmission.Create,
5232
-+			pod:                newTestPodBuilder().withToleration("", "", kapi.TolerationOpExists, "").build(),
5233
-+			userInfo:           newTestUserBuilder().build(),
5234
-+			shouldPassValidate: false,
5235
-+		},
5236
-+		"denied: create pod with value wildcard toleration": {
5237
-+			operation:          kadmission.Create,
5238
-+			pod:                newTestPodBuilder().withToleration(reservedTolerationKey, "", kapi.TolerationOpExists, kapi.TaintEffectNoSchedule).build(),
5239
-+			userInfo:           newTestUserBuilder().build(),
5240
-+			shouldPassValidate: false,
5241
-+		},
5242
-+		"allowed: create pod with value wildcard and normal key": {
5243
-+			operation:          kadmission.Create,
5244
-+			pod:                newTestPodBuilder().withToleration("mykey", "", kapi.TolerationOpExists, kapi.TaintEffectNoSchedule).build(),
5245
-+			userInfo:           newTestUserBuilder().build(),
5246
-+			shouldPassValidate: true,
5247
-+		},
5248
-+	}
5249
-+
5250
-+	for k, v := range tests {
5251
-+		testPodValidation(k, v.operation, v.pod, v.name, v.userInfo, v.shouldPassValidate, t)
5252
-+	}
5253
-+}
5254
-+
5255
-+func TestClusterLevelResources(t *testing.T) {
5256
-+	tests := map[string]struct {
5257
-+		operation          kadmission.Operation
5258
-+		resource           string
5259
-+		subresource        string
5260
-+		name               string
5261
-+		namespace          string
5262
-+		userInfo           user.Info
5263
-+		object             runtime.Object
5264
-+		oldObject          runtime.Object
5265
-+		shouldPassValidate bool
5266
-+	}{
5267
-+		"denied: regular lightwave user update configmaps in vke-system namespace": {
5268
-+			operation:          kadmission.Update,
5269
-+			resource:           "configmaps",
5270
-+			namespace:          privilegedNamespace,
5271
-+			userInfo:           newTestUserBuilder().build(),
5272
-+			shouldPassValidate: false,
5273
-+		},
5274
-+		"denied: regular lightwave user delete daemonsets in vke-system namespace": {
5275
-+			operation:          kadmission.Delete,
5276
-+			resource:           "daemonsets",
5277
-+			namespace:          privilegedNamespace,
5278
-+			userInfo:           newTestUserBuilder().build(),
5279
-+			shouldPassValidate: false,
5280
-+		},
5281
-+		"denied: regular lightwave user create deployments in vke-system namespace": {
5282
-+			operation:          kadmission.Create,
5283
-+			resource:           "deployments",
5284
-+			namespace:          privilegedNamespace,
5285
-+			userInfo:           newTestUserBuilder().build(),
5286
-+			shouldPassValidate: false,
5287
-+		},
5288
-+		"denied: regular lightwave user create rolebindings in vke-system namespace": {
5289
-+			operation:          kadmission.Create,
5290
-+			resource:           "rolebindings",
5291
-+			namespace:          privilegedNamespace,
5292
-+			userInfo:           newTestUserBuilder().build(),
5293
-+			shouldPassValidate: false,
5294
-+		},
5295
-+		"allowed: regular lightwave user create rolebindings in other namespace": {
5296
-+			operation:          kadmission.Create,
5297
-+			resource:           "rolebindings",
5298
-+			namespace:          "default",
5299
-+			userInfo:           newTestUserBuilder().build(),
5300
-+			shouldPassValidate: true,
5301
-+		},
5302
-+		"allowed: regular lightwave user create clusterroles": {
5303
-+			operation:          kadmission.Create,
5304
-+			resource:           "clusterroles",
5305
-+			name:               "cluster-role",
5306
-+			namespace:          "",
5307
-+			userInfo:           newTestUserBuilder().build(),
5308
-+			shouldPassValidate: true,
5309
-+		},
5310
-+		"denied: regular lightwave user create clusterroles with vke: prefix": {
5311
-+			operation:          kadmission.Create,
5312
-+			resource:           "clusterroles",
5313
-+			name:               "vke:clusterrole",
5314
-+			namespace:          "",
5315
-+			userInfo:           newTestUserBuilder().build(),
5316
-+			shouldPassValidate: false,
5317
-+		},
5318
-+		"denied: regular lightwave user delete clusterroles with vke: prefix": {
5319
-+			operation:          kadmission.Delete,
5320
-+			resource:           "clusterroles",
5321
-+			name:               "vke:clusterrole",
5322
-+			namespace:          "",
5323
-+			userInfo:           newTestUserBuilder().build(),
5324
-+			shouldPassValidate: false,
5325
-+		},
5326
-+		"allowed: systemMasters group update clusterroles with vke: prefix": {
5327
-+			operation:          kadmission.Update,
5328
-+			resource:           "clusterroles",
5329
-+			name:               "vke:clusterrole",
5330
-+			namespace:          "",
5331
-+			userInfo:           newTestUserBuilder().withGroup(systemMastersGroup).build(),
5332
-+			shouldPassValidate: true,
5333
-+		},
5334
-+		"allowed: regular lightwave user create clusterrolebindings": {
5335
-+			operation:          kadmission.Create,
5336
-+			resource:           "clusterrolebindings",
5337
-+			name:               "cluster-role-binding",
5338
-+			namespace:          "",
5339
-+			userInfo:           newTestUserBuilder().build(),
5340
-+			shouldPassValidate: true,
5341
-+		},
5342
-+		"denied: regular lightwave user create clusterrolebindings with vke: prefix": {
5343
-+			operation:          kadmission.Create,
5344
-+			resource:           "clusterrolebindings",
5345
-+			name:               "vke:clusterrolebinding",
5346
-+			namespace:          "",
5347
-+			userInfo:           newTestUserBuilder().build(),
5348
-+			shouldPassValidate: false,
5349
-+		},
5350
-+		"denied: regular lightwave user update clusterrolebindings with vke: prefix": {
5351
-+			operation:          kadmission.Delete,
5352
-+			resource:           "clusterrolebindings",
5353
-+			name:               "vke:clusterrolebinding",
5354
-+			namespace:          "",
5355
-+			userInfo:           newTestUserBuilder().build(),
5356
-+			shouldPassValidate: false,
5357
-+		},
5358
-+		"allowed: systemMastersGroup update clusterrolebindings with vke: prefix": {
5359
-+			operation:          kadmission.Update,
5360
-+			resource:           "clusterrolebindings",
5361
-+			name:               "vke:clusterrolebinding",
5362
-+			namespace:          "",
5363
-+			userInfo:           newTestUserBuilder().withGroup(systemMastersGroup).build(),
5364
-+			shouldPassValidate: true,
5365
-+		},
5366
-+		"allowed: regular lightwave user update worker nodes": {
5367
-+			operation:          kadmission.Update,
5368
-+			resource:           "nodes",
5369
-+			name:               "worker-guid",
5370
-+			namespace:          "",
5371
-+			userInfo:           newTestUserBuilder().build(),
5372
-+			shouldPassValidate: true,
5373
-+		},
5374
-+		"allowed: regular lightwave user get worker nodes proxy subresource": {
5375
-+			operation:          kadmission.Connect,
5376
-+			resource:           "nodes",
5377
-+			subresource:        "proxy",
5378
-+			name:               "worker-guid",
5379
-+			namespace:          "",
5380
-+			userInfo:           newTestUserBuilder().build(),
5381
-+			shouldPassValidate: true,
5382
-+		},
5383
-+		"allowed: regular lightwave user patch worker nodes proxy subresource": {
5384
-+			operation:          kadmission.Update,
5385
-+			resource:           "nodes",
5386
-+			subresource:        "proxy",
5387
-+			name:               "worker-guid",
5388
-+			namespace:          "",
5389
-+			userInfo:           newTestUserBuilder().build(),
5390
-+			shouldPassValidate: true,
5391
-+		},
5392
-+		"allowed: regular lightwave user create worker nodes proxy subresource": {
5393
-+			operation:          kadmission.Create,
5394
-+			resource:           "nodes",
5395
-+			subresource:        "proxy",
5396
-+			name:               "worker-guid",
5397
-+			namespace:          "",
5398
-+			userInfo:           newTestUserBuilder().build(),
5399
-+			shouldPassValidate: true,
5400
-+		},
5401
-+		"allowed: regular lightwave user get master nodes proxy subresource": {
5402
-+			operation:          kadmission.Connect,
5403
-+			resource:           "nodes",
5404
-+			subresource:        "proxy",
5405
-+			name:               "master-guid",
5406
-+			namespace:          "",
5407
-+			userInfo:           newTestUserBuilder().build(),
5408
-+			shouldPassValidate: true,
5409
-+		},
5410
-+		"denied: regular lightwave user patch master nodes proxy subresource": {
5411
-+			operation:          kadmission.Update,
5412
-+			resource:           "nodes",
5413
-+			subresource:        "proxy",
5414
-+			name:               "master-guid",
5415
-+			namespace:          "",
5416
-+			userInfo:           newTestUserBuilder().build(),
5417
-+			shouldPassValidate: false,
5418
-+		},
5419
-+		"denied: regular lightwave user create master nodes proxy subresource": {
5420
-+			operation:          kadmission.Create,
5421
-+			resource:           "nodes",
5422
-+			subresource:        "proxy",
5423
-+			name:               "master-guid",
5424
-+			namespace:          "",
5425
-+			userInfo:           newTestUserBuilder().build(),
5426
-+			shouldPassValidate: false,
5427
-+		},
5428
-+		"denied: regular lightwave user update master nodes": {
5429
-+			operation:          kadmission.Update,
5430
-+			resource:           "nodes",
5431
-+			name:               "master-guid",
5432
-+			namespace:          "",
5433
-+			userInfo:           newTestUserBuilder().build(),
5434
-+			shouldPassValidate: false,
5435
-+		},
5436
-+		"denied: regular lightwave user delete master nodes": {
5437
-+			operation:          kadmission.Delete,
5438
-+			resource:           "nodes",
5439
-+			name:               "master-guid",
5440
-+			namespace:          "",
5441
-+			userInfo:           newTestUserBuilder().build(),
5442
-+			shouldPassValidate: false,
5443
-+		},
5444
-+		"denied: regular lightwave user delete worker nodes": {
5445
-+			operation:          kadmission.Delete,
5446
-+			resource:           "nodes",
5447
-+			name:               "worker-guid",
5448
-+			namespace:          "",
5449
-+			userInfo:           newTestUserBuilder().build(),
5450
-+			shouldPassValidate: false,
5451
-+		},
5452
-+		"allowed: systemMasters group update nodes": {
5453
-+			operation:          kadmission.Update,
5454
-+			resource:           "nodes",
5455
-+			namespace:          "",
5456
-+			userInfo:           newTestUserBuilder().withGroup(systemMastersGroup).build(),
5457
-+			shouldPassValidate: true,
5458
-+		},
5459
-+		"allowed: kubelet update node": {
5460
-+			operation:          kadmission.Update,
5461
-+			resource:           "nodes",
5462
-+			namespace:          "",
5463
-+			userInfo:           newTestUserBuilder().withGroup(systemNodesGroup).build(),
5464
-+			shouldPassValidate: true,
5465
-+		},
5466
-+		"allowed: privileged service account update worker node taint": {
5467
-+			operation:          kadmission.Update,
5468
-+			resource:           "nodes",
5469
-+			namespace:          "",
5470
-+			name:               "worker-guid",
5471
-+			oldObject:          newTestNodeBuilder().build(),
5472
-+			object:             newTestNodeBuilder().withTaint(nil).build(),
5473
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5474
-+			shouldPassValidate: true,
5475
-+		},
5476
-+		"denied: privileged service account update master node taint": {
5477
-+			operation:          kadmission.Update,
5478
-+			resource:           "nodes",
5479
-+			namespace:          "",
5480
-+			name:               "master-guid",
5481
-+			oldObject:          newTestNodeBuilder().build(),
5482
-+			object:             newTestNodeBuilder().withTaint(nil).build(),
5483
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5484
-+			shouldPassValidate: false,
5485
-+		},
5486
-+		"denied: privileged service account create a deployment": {
5487
-+			operation:          kadmission.Create,
5488
-+			resource:           "deployments",
5489
-+			namespace:          "vke-system",
5490
-+			userInfo:           newTestUserBuilder().withName(privilegedServiceAccount + "default").build(),
5491
-+			shouldPassValidate: false,
5492
-+		},
5493
-+		"denied: worker kubelet create a deployment": {
5494
-+			operation:          kadmission.Create,
5495
-+			resource:           "deployments",
5496
-+			namespace:          "vke-system",
5497
-+			userInfo:           newTestUserBuilder().withGroup(systemWorkerGroup).build(),
5498
-+			shouldPassValidate: false,
5499
-+		},
5500
-+	}
5501
-+	for k, v := range tests {
5502
-+		testResourceValidation(k, v.operation, v.resource, v.subresource, v.name, v.namespace, v.userInfo, v.object,
5503
-+			v.oldObject, v.shouldPassValidate, t)
5504
-+	}
5505
-+}
5506
-+
5507
-+func testPodValidation(testCaseName string, op kadmission.Operation, pod *kapi.Pod, name string, userInfo user.Info,
5508
-+	shouldPassValidate bool, t *testing.T) {
5509
-+
5510
-+	defaultConfigFile := fmt.Sprintf(defaultConfigFileFormat, testServiceAccountsGroup, pspFileName, clusterID)
5511
-+	configFile := strings.NewReader(defaultConfigFile)
5512
-+	plugin, err := NewVMwareAdmissionController(configFile)
5513
-+	if err != nil {
5514
-+		t.Errorf("%s: failed to create admission controller %v", testCaseName, err)
5515
-+	}
5516
-+
5517
-+	namespace := "default"
5518
-+	if pod != nil {
5519
-+		namespace = pod.Namespace
5520
-+	}
5521
-+
5522
-+	attrs := kadmission.NewAttributesRecord(pod, nil, kapi.Kind("Pod").WithVersion("version"),
5523
-+		namespace, name, kapi.Resource("pods").WithVersion("version"), "", op, userInfo)
5524
-+
5525
-+	err = plugin.Admit(attrs)
5526
-+	if shouldPassValidate && err != nil {
5527
-+		t.Errorf("%s: expected no errors on Validate but received %v", testCaseName, err)
5528
-+	} else if !shouldPassValidate && err == nil {
5529
-+		t.Errorf("%s: expected errors on Validate but received none", testCaseName)
5530
-+	}
5531
-+}
5532
-+
5533
-+func testResourceValidation(testCaseName string, op kadmission.Operation, resource, subresource, name, namespace string,
5534
-+	userInfo user.Info, object runtime.Object, oldObject runtime.Object, shouldPassValidate bool, t *testing.T) {
5535
-+
5536
-+	defaultConfigFile := fmt.Sprintf(defaultConfigFileFormat, testServiceAccountsGroup, pspFileName, clusterID)
5537
-+	configFile := strings.NewReader(defaultConfigFile)
5538
-+	plugin, err := NewVMwareAdmissionController(configFile)
5539
-+	if err != nil {
5540
-+		t.Errorf("%s: failed to create admission controller %v", testCaseName, err)
5541
-+	}
5542
-+
5543
-+	groupResource := kapi.Resource(resource).WithVersion("version")
5544
-+	if resource == "clusterroles" || resource == "clusterrolebindings" {
5545
-+		groupResource = rbac.Resource(resource).WithVersion("version")
5546
-+	}
5547
-+
5548
-+	attrs := kadmission.NewAttributesRecord(object, oldObject, kapi.Kind("kind").WithVersion("version"),
5549
-+		namespace, name, groupResource, subresource, op, userInfo)
5550
-+
5551
-+	err = plugin.Admit(attrs)
5552
-+	if shouldPassValidate && err != nil {
5553
-+		t.Errorf("%s: expected no errors on Validate but received %v", testCaseName, err)
5554
-+	} else if !shouldPassValidate && err == nil {
5555
-+		t.Errorf("%s: expected errors on Validate but received none", testCaseName)
5556
-+	}
5557
-+}
5558
-+
5559
-+// testPodBuilder
5560
-+type testPodBuilder struct {
5561
-+	pod kapi.Pod
5562
-+}
5563
-+
5564
-+func newTestPodBuilder() *testPodBuilder {
5565
-+	builder := new(testPodBuilder)
5566
-+	return builder.init()
5567
-+}
5568
-+
5569
-+func (p *testPodBuilder) init() *testPodBuilder {
5570
-+	p.pod = kapi.Pod{
5571
-+		ObjectMeta: metav1.ObjectMeta{
5572
-+			Name:        "pod",
5573
-+			Namespace:   "namespace",
5574
-+			Annotations: map[string]string{},
5575
-+		},
5576
-+		Spec: kapi.PodSpec{
5577
-+			ServiceAccountName: "default",
5578
-+			SecurityContext:    &kapi.PodSecurityContext{},
5579
-+			Containers: []kapi.Container{
5580
-+				{
5581
-+					Name:            "test-container-1",
5582
-+					SecurityContext: &kapi.SecurityContext{},
5583
-+				},
5584
-+			},
5585
-+		},
5586
-+	}
5587
-+	return p
5588
-+}
5589
-+
5590
-+func (p *testPodBuilder) build() *kapi.Pod {
5591
-+	return &p.pod
5592
-+}
5593
-+
5594
-+func (p *testPodBuilder) withNamespace(namespace string) *testPodBuilder {
5595
-+	p.pod.ObjectMeta.Namespace = namespace
5596
-+	return p
5597
-+}
5598
-+
5599
-+func (p *testPodBuilder) withServiceAccount(sa string) *testPodBuilder {
5600
-+	p.pod.Spec.ServiceAccountName = sa
5601
-+	return p
5602
-+}
5603
-+
5604
-+func (p *testPodBuilder) withPrivileged(v bool) *testPodBuilder {
5605
-+	p.pod.Spec.Containers[0].SecurityContext.Privileged = &v
5606
-+	return p
5607
-+}
5608
-+
5609
-+func (p *testPodBuilder) withHostNetwork(v bool) *testPodBuilder {
5610
-+	p.pod.Spec.SecurityContext.HostNetwork = v
5611
-+	return p
5612
-+}
5613
-+
5614
-+func (p *testPodBuilder) withHostIPC(v bool) *testPodBuilder {
5615
-+	p.pod.Spec.SecurityContext.HostIPC = v
5616
-+	return p
5617
-+}
5618
-+
5619
-+func (p *testPodBuilder) withHostPID(v bool) *testPodBuilder {
5620
-+	p.pod.Spec.SecurityContext.HostPID = v
5621
-+	return p
5622
-+}
5623
-+
5624
-+func (p *testPodBuilder) withHostPort() *testPodBuilder {
5625
-+	containerPorts := []kapi.ContainerPort{
5626
-+		{
5627
-+			HostPort:      3000,
5628
-+			ContainerPort: 80,
5629
-+		},
5630
-+	}
5631
-+
5632
-+	p.pod.Spec.Containers[0].Ports = containerPorts
5633
-+	return p
5634
-+}
5635
-+
5636
-+func (p *testPodBuilder) withHostVolume(hostPath string, readOnly bool) *testPodBuilder {
5637
-+	volume := kapi.Volume{
5638
-+		Name: "host",
5639
-+		VolumeSource: kapi.VolumeSource{
5640
-+			HostPath: &kapi.HostPathVolumeSource{
5641
-+				Path: hostPath,
5642
-+			},
5643
-+		},
5644
-+	}
5645
-+	volumeMount := kapi.VolumeMount{Name: "host", MountPath: "/data", ReadOnly: readOnly}
5646
-+
5647
-+	p.pod.Spec.Volumes = append(p.pod.Spec.Volumes, volume)
5648
-+	p.pod.Spec.Containers[0].VolumeMounts = append(p.pod.Spec.Containers[0].VolumeMounts, volumeMount)
5649
-+	return p
5650
-+}
5651
-+
5652
-+func (p *testPodBuilder) withCascadeDisk() *testPodBuilder {
5653
-+	volume := kapi.Volume{
5654
-+		Name: "cascadeDisk",
5655
-+		VolumeSource: kapi.VolumeSource{
5656
-+			PersistentVolumeClaim: &kapi.PersistentVolumeClaimVolumeSource{
5657
-+				ClaimName: "00000000-0000-0000-0000-000000000001",
5658
-+				ReadOnly:  false,
5659
-+			},
5660
-+		},
5661
-+	}
5662
-+	device := kapi.VolumeDevice{Name: "cascadeDisk", DevicePath: "/cascadeDisk"}
5663
-+
5664
-+	p.pod.Spec.Volumes = append(p.pod.Spec.Volumes, volume)
5665
-+	p.pod.Spec.Containers[0].VolumeDevices = append(p.pod.Spec.Containers[0].VolumeDevices, device)
5666
-+	return p
5667
-+}
5668
-+
5669
-+func (p *testPodBuilder) withContainer() *testPodBuilder {
5670
-+	container := kapi.Container{
5671
-+		Name:            "test-container-2",
5672
-+		SecurityContext: &kapi.SecurityContext{},
5673
-+	}
5674
-+
5675
-+	p.pod.Spec.Containers = append(p.pod.Spec.Containers, container)
5676
-+	return p
5677
-+}
5678
-+
5679
-+func (p *testPodBuilder) withInitContainer() *testPodBuilder {
5680
-+	container := kapi.Container{
5681
-+		Name:            "test-init-container",
5682
-+		SecurityContext: &kapi.SecurityContext{},
5683
-+	}
5684
-+
5685
-+	p.pod.Spec.Containers = append(p.pod.Spec.Containers, container)
5686
-+	return p
5687
-+}
5688
-+
5689
-+func (p *testPodBuilder) withToleration(key, value string, operator kapi.TolerationOperator, effect kapi.TaintEffect) *testPodBuilder {
5690
-+	p.pod.Spec.Tolerations = append(p.pod.Spec.Tolerations, kapi.Toleration{
5691
-+		Key:      key,
5692
-+		Value:    value,
5693
-+		Operator: operator,
5694
-+		Effect:   effect,
5695
-+	})
5696
-+	return p
5697
-+}
5698
-+
5699
-+// testUserBuilder
5700
-+type testUserBuilder struct {
5701
-+	user *user.DefaultInfo
5702
-+}
5703
-+
5704
-+func newTestUserBuilder() *testUserBuilder {
5705
-+	builder := new(testUserBuilder)
5706
-+	return builder.init()
5707
-+}
5708
-+
5709
-+func (p *testUserBuilder) init() *testUserBuilder {
5710
-+	p.user = &user.DefaultInfo{
5711
-+		Name:   "https://lightwave.cascade-cloud.com/openidconnect/00000000-0000-0000-0000-000000000001#joe@vmware.com",
5712
-+		UID:    "10001",
5713
-+		Groups: []string{},
5714
-+	}
5715
-+	return p
5716
-+}
5717
-+
5718
-+func (p *testUserBuilder) build() *user.DefaultInfo {
5719
-+	return p.user
5720
-+}
5721
-+
5722
-+func (p *testUserBuilder) withName(name string) *testUserBuilder {
5723
-+	p.user.Name = name
5724
-+	return p
5725
-+}
5726
-+
5727
-+func (p *testUserBuilder) withGroup(group string) *testUserBuilder {
5728
-+	p.user.Groups = append(p.user.Groups, group)
5729
-+	return p
5730
-+}
5731
-+
5732
-+// testNodeBuilder
5733
-+type testNodeBuilder struct {
5734
-+	node kapi.Node
5735
-+}
5736
-+
5737
-+func newTestNodeBuilder() *testNodeBuilder {
5738
-+	builder := new(testNodeBuilder)
5739
-+	return builder.init()
5740
-+}
5741
-+
5742
-+func (n *testNodeBuilder) init() *testNodeBuilder {
5743
-+	n.node = kapi.Node{
5744
-+		ObjectMeta: metav1.ObjectMeta{
5745
-+			Name:        "node",
5746
-+			Namespace:   "",
5747
-+			Annotations: nil,
5748
-+		},
5749
-+		Spec: kapi.NodeSpec{
5750
-+			Taints: []kapi.Taint{
5751
-+				{
5752
-+					"Dedicated", "Master", "NoSchedule", nil,
5753
-+				},
5754
-+			},
5755
-+		},
5756
-+	}
5757
-+	return n
5758
-+}
5759
-+
5760
-+func (n *testNodeBuilder) build() *kapi.Node {
5761
-+	return &n.node
5762
-+}
5763
-+
5764
-+func (n *testNodeBuilder) withTaint(taints []kapi.Taint) *testNodeBuilder {
5765
-+	n.node.Spec.Taints = taints
5766
-+	return n
5767
-+}
5768
-+
5769
-diff --git a/plugin/pkg/auth/authorizer/vke/BUILD b/plugin/pkg/auth/authorizer/vke/BUILD
5770
-new file mode 100644
5771
-index 0000000..4b984f1
5772
-+++ b/plugin/pkg/auth/authorizer/vke/BUILD
5773
-@@ -0,0 +1,40 @@
5774
-+package(default_visibility = ["//visibility:public"])
5775
-+
5776
-+load(
5777
-+    "@io_bazel_rules_go//go:def.bzl",
5778
-+    "go_library",
5779
-+)
5780
-+
5781
-+go_test(
5782
-+    name = "go_default_test",
5783
-+    srcs = ["vke_authorizer_test.go"],
5784
-+    embed = [":go_default_library"],
5785
-+    deps = [
5786
-+        "//vendor/k8s.io/apiserver/pkg/authentication/user:go_default_library",
5787
-+        "//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
5788
-+    ],
5789
-+)
5790
-+
5791
-+go_library(
5792
-+    name = "go_default_library",
5793
-+    srcs = [
5794
-+        "vke_authorizer.go",
5795
-+    ],
5796
-+    importpath = "k8s.io/kubernetes/plugin/pkg/auth/authorizer/vke",
5797
-+    deps = [
5798
-+        "//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
5799
-+    ],
5800
-+)
5801
-+
5802
-+filegroup(
5803
-+    name = "package-srcs",
5804
-+    srcs = glob(["**"]),
5805
-+    tags = ["automanaged"],
5806
-+    visibility = ["//visibility:private"],
5807
-+)
5808
-+
5809
-+filegroup(
5810
-+    name = "all-srcs",
5811
-+    srcs = [":package-srcs"],
5812
-+    tags = ["automanaged"],
5813
-+)
5814
-diff --git a/plugin/pkg/auth/authorizer/vke/OWNERS b/plugin/pkg/auth/authorizer/vke/OWNERS
5815
-new file mode 100644
5816
-index 0000000..c3a4ed7
5817
-+++ b/plugin/pkg/auth/authorizer/vke/OWNERS
5818
-@@ -0,0 +1,2 @@
5819
-+maintainers:
5820
-+- ashokc
5821
-diff --git a/plugin/pkg/auth/authorizer/vke/vke_authorizer.go b/plugin/pkg/auth/authorizer/vke/vke_authorizer.go
5822
-new file mode 100644
5823
-index 0000000..6d7f9ae
5824
-+++ b/plugin/pkg/auth/authorizer/vke/vke_authorizer.go
5825
-@@ -0,0 +1,125 @@
5826
-+package vke
5827
-+
5828
-+import (
5829
-+	"bufio"
5830
-+	"fmt"
5831
-+	"os"
5832
-+	"strings"
5833
-+
5834
-+	"github.com/golang/glog"
5835
-+	"k8s.io/apiserver/pkg/authorization/authorizer"
5836
-+)
5837
-+
5838
-+const (
5839
-+	systemClusterPrefix = "system:clusterID:"
5840
-+	systemNodePrefix    = "system:node:"
5841
-+	systemWorkerGroup   = "system:worker"
5842
-+	masterPrefix        = "master-"
5843
-+)
5844
-+
5845
-+
5846
-+// VKEAuthorizer authorizes requests which comes from nodes using certificates.
5847
-+// If a request is from a node which is not a part of the cluster, reject.
5848
-+type VKEAuthorizer struct {
5849
-+	clusterID string
5850
-+}
5851
-+
5852
-+// NewAuthorizer returns a new node authorizer
5853
-+func NewAuthorizer() (authorizer.Authorizer, error) {
5854
-+	file, err := os.Open("/etc/kubernetes/cc_cloud.config")
5855
-+	if err != nil {
5856
-+		return nil, err
5857
-+	}
5858
-+	defer file.Close()
5859
-+
5860
-+	scanner := bufio.NewScanner(file)
5861
-+
5862
-+	for scanner.Scan() {
5863
-+		lineContent := scanner.Text()
5864
-+		if strings.Contains(lineContent, "clusterID = ") {
5865
-+			clusterID := strings.SplitAfter(lineContent, "= ")[1]
5866
-+			return &VKEAuthorizer{clusterID: clusterID}, nil
5867
-+		}
5868
-+	}
5869
-+
5870
-+	return nil, fmt.Errorf("Cluster ID cannot be parsed from config file successfully")
5871
-+}
5872
-+
5873
-+// Authorize authorizes requests based on the VKE authorizer.
5874
-+func (v *VKEAuthorizer) Authorize(attrs authorizer.Attributes) (authorizer.Decision, string, error) {
5875
-+	// If the request comes from a non cluster node, then deny.
5876
-+	if isNonClusterNode(attrs, v.clusterID) {
5877
-+		glog.V(2).Infof("VKE authorizer: DENY the request because it is from a different cluster")
5878
-+		return authorizer.DecisionDeny, "", nil
5879
-+	}
5880
-+
5881
-+	// If a worker node name does not have the node prefix, then deny. This is needed for the request to go through node
5882
-+	// authorizer and node restriction admission controller. If it is not set, then a user can bypass node authorizer
5883
-+	// and the node restriction admission controller and modify the master node.
5884
-+	if isWorkerWithoutNodeNameRestriction(attrs) {
5885
-+		glog.V(2).Infof("VKE authorizer: DENY the request because the node name restriction is not met")
5886
-+		return authorizer.DecisionDeny, "", nil
5887
-+	}
5888
-+
5889
-+	// If it is a proxy request to the master node to exec, run or attach to a container, then deny.
5890
-+	if isProxyRequestToMasterNode(attrs) {
5891
-+		glog.V(2).Infof("VKE authorizer: DENY the request because it tried to execute commands on master pods")
5892
-+		return authorizer.DecisionDeny, "", nil
5893
-+	}
5894
-+
5895
-+	return authorizer.DecisionNoOpinion, "", nil
5896
-+}
5897
-+
5898
-+// isNonClusterNode verifies that the request is not from a node which does not belong to this cluster. This is needed
5899
-+// to prevent cross cluster attacks where a user can use the kubelet certificate of one cluster to access the resources
5900
-+// in another cluster. The reason we have this check is because, when a certificate is presented for authentication,
5901
-+// Kubernetes just verifies that the certificate is signed by the CA that the cluster trusts. Since, in our case, the CA
5902
-+// is same for all clusters, authentication with certificate is not enough. So, we make sure that the request is not
5903
-+// from another cluster. Lightwave will make sure that any certificates generated on a worker will always have the
5904
-+// "system:clusterID:<id>" group. This way, we can just check the cluster ID in the group and reject if it is not the
5905
-+// same as this cluster's ID.
5906
-+func isNonClusterNode(attrs authorizer.Attributes, clusterID string) bool {
5907
-+	groups := attrs.GetUser().GetGroups()
5908
-+	for _, group := range groups {
5909
-+		if strings.HasPrefix(group, systemClusterPrefix) {
5910
-+			groupParts := strings.Split(group, ":")
5911
-+			if clusterID != "" && groupParts[len(groupParts)-1] != clusterID {
5912
-+				return true
5913
-+			}
5914
-+		}
5915
-+	}
5916
-+
5917
-+	return false
5918
-+}
5919
-+
5920
-+// isWorkerWithoutNodeNameRestriction verifies that the certificate presented by the worker nodes also have the
5921
-+// appropriate name "system:node:<hostname>". We need to validate this because it is possible for a user to generate
5922
-+// certificates with CN other than "system:node:<hostname>". This is because lightwave does group validation and that
5923
-+// the CNs can be one of system:node:<hostname>, kubernetes-master and etcd. When that happens, that certificate will be
5924
-+// able to bypass the NodeRestriction admission controller which will allow access to modify master node and create pods
5925
-+// on master. To prevent that from happening, we need to verify that if a request comes from a worker node, then it has
5926
-+// to have the expected name so that NodeRestriction admission controller is enforced.
5927
-+func isWorkerWithoutNodeNameRestriction(attrs authorizer.Attributes) bool {
5928
-+	groups := attrs.GetUser().GetGroups()
5929
-+	name := attrs.GetUser().GetName()
5930
-+	for _, group := range groups {
5931
-+		if group == systemWorkerGroup && !strings.HasPrefix(name, systemNodePrefix) {
5932
-+			return true
5933
-+		}
5934
-+	}
5935
-+	return false
5936
-+}
5937
-+
5938
-+// isProxyRequestToMasterNode checks if the request is made to exec, run or attach to a container on the master node. We
5939
-+// need this check because we do not want to allow a user to exec into a privileged pod on the master node.
5940
-+func isProxyRequestToMasterNode(attrs authorizer.Attributes) bool {
5941
-+	if attrs.GetResource() == "nodes" && strings.HasPrefix(attrs.GetName(), masterPrefix) {
5942
-+		if strings.Contains(attrs.GetPath(), "proxy/run") ||
5943
-+			strings.Contains(attrs.GetPath(), "proxy/exec") ||
5944
-+			strings.Contains(attrs.GetPath(), "proxy/attach") {
5945
-+			return true
5946
-+		}
5947
-+	}
5948
-+	return false
5949
-+}
5950
-+
5951
-diff --git a/plugin/pkg/auth/authorizer/vke/vke_authorizer_test.go b/plugin/pkg/auth/authorizer/vke/vke_authorizer_test.go
5952
-new file mode 100644
5953
-index 0000000..6aba9ec
5954
-+++ b/plugin/pkg/auth/authorizer/vke/vke_authorizer_test.go
5955
-@@ -0,0 +1,230 @@
5956
-+package vke
5957
-+
5958
-+import (
5959
-+	"testing"
5960
-+
5961
-+	"k8s.io/apiserver/pkg/authentication/user"
5962
-+	"k8s.io/apiserver/pkg/authorization/authorizer"
5963
-+)
5964
-+
5965
-+const (
5966
-+	masterProxyAttachPath = "/api/v1/nodes/master-0/proxy/attach/vke-system/pod-name/container-name"
5967
-+	masterProxyExecPath   = "/api/v1/nodes/master-0/proxy/exec/vke-system/pod-name/container-name"
5968
-+	masterProxyRunPath    = "/api/v1/nodes/master-0/proxy/run/vke-system/pod-name/container-name"
5969
-+	workerProxyAttachPath = "/api/v1/nodes/worker-0/proxy/attach/vke-system/pod-name/container-name"
5970
-+	workerProxyExecPath   = "/api/v1/nodes/worker-0/proxy/exec/vke-system/pod-name/container-name"
5971
-+	workerProxyRunPath    = "/api/v1/nodes/worker-0/proxy/run/vke-system/pod-name/container-name"
5972
-+)
5973
-+
5974
-+func TestAuthorizer(t *testing.T) {
5975
-+	authz := &VKEAuthorizer{clusterID: "cluster-id"}
5976
-+
5977
-+	clusterNode := &user.DefaultInfo{Name: "system:node:worker-0", Groups: []string{"system:nodes", "system:clusterID:cluster-id", "system:worker"}}
5978
-+	crossClusterNode := &user.DefaultInfo{Name: "system:node:worker-0", Groups: []string{"system:nodes", "system:clusterID:invalid", "system:worker"}}
5979
-+	invalidWorker := &user.DefaultInfo{Name: "worker-0", Groups: []string{"system:nodes", "system:clusterID:cluster-id", "system:worker"}}
5980
-+
5981
-+	tests := []struct {
5982
-+		name   string
5983
-+		attrs  authorizer.AttributesRecord
5984
-+		expect authorizer.Decision
5985
-+	}{
5986
-+		// Do not deny requests from a normal cluster node user.
5987
-+		{
5988
-+			name:   "allowed: cluster node get pod",
5989
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "get", Resource: "pods", Name: "pod", Namespace: "ns"},
5990
-+			expect: authorizer.DecisionNoOpinion,
5991
-+		},
5992
-+		{
5993
-+			name:   "allowed: cluster node list pod",
5994
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "list", Resource: "pods", Namespace: "ns"},
5995
-+			expect: authorizer.DecisionNoOpinion,
5996
-+		},
5997
-+		{
5998
-+			name:   "allowed: cluster node create pod",
5999
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "pods", Name: "pod", Namespace: "ns"},
6000
-+			expect: authorizer.DecisionNoOpinion,
6001
-+		},
6002
-+		{
6003
-+			name:   "allowed: cluster node update pod",
6004
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "update", Resource: "pods", Name: "pod", Namespace: "ns"},
6005
-+			expect: authorizer.DecisionNoOpinion,
6006
-+		},
6007
-+		{
6008
-+			name:   "allowed: cluster node delete pod",
6009
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "delete", Resource: "pods", Name: "pod", Namespace: "ns"},
6010
-+			expect: authorizer.DecisionNoOpinion,
6011
-+		},
6012
-+		{
6013
-+			name:   "allowed: cluster node get node",
6014
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "get", Resource: "nodes", Name: "node"},
6015
-+			expect: authorizer.DecisionNoOpinion,
6016
-+		},
6017
-+		{
6018
-+			name:   "allowed: cluster node list nodes",
6019
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "list", Resource: "nodes"},
6020
-+			expect: authorizer.DecisionNoOpinion,
6021
-+		},
6022
-+		{
6023
-+			name:   "allowed: cluster node create nodes",
6024
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "node"},
6025
-+			expect: authorizer.DecisionNoOpinion,
6026
-+		},
6027
-+		{
6028
-+			name:   "allowed: cluster node update nodes",
6029
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "update", Resource: "nodes", Name: "node"},
6030
-+			expect: authorizer.DecisionNoOpinion,
6031
-+		},
6032
-+		{
6033
-+			name:   "allowed: cluster node delete nodes",
6034
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "delete", Resource: "nodes", Name: "node"},
6035
-+			expect: authorizer.DecisionNoOpinion,
6036
-+		},
6037
-+
6038
-+		// Deny requests from another cluster node.
6039
-+		{
6040
-+			name:   "denied: cross cluster node get pod",
6041
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "get", Resource: "pods", Name: "pod", Namespace: "ns"},
6042
-+			expect: authorizer.DecisionDeny,
6043
-+		},
6044
-+		{
6045
-+			name:   "denied: cross cluster node list pod",
6046
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "list", Resource: "pods", Namespace: "ns"},
6047
-+			expect: authorizer.DecisionDeny,
6048
-+		},
6049
-+		{
6050
-+			name:   "denied: cross cluster node create pod",
6051
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "create", Resource: "pods", Name: "pod", Namespace: "ns"},
6052
-+			expect: authorizer.DecisionDeny,
6053
-+		},
6054
-+		{
6055
-+			name:   "denied: cross cluster node update pod",
6056
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "update", Resource: "pods", Name: "pod", Namespace: "ns"},
6057
-+			expect: authorizer.DecisionDeny,
6058
-+		},
6059
-+		{
6060
-+			name:   "denied: cross cluster node delete pod",
6061
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "delete", Resource: "pods", Name: "pod", Namespace: "ns"},
6062
-+			expect: authorizer.DecisionDeny,
6063
-+		},
6064
-+		{
6065
-+			name:   "denied: cross cluster node get node",
6066
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "get", Resource: "nodes", Name: "node"},
6067
-+			expect: authorizer.DecisionDeny,
6068
-+		},
6069
-+		{
6070
-+			name:   "denied: cross cluster node list nodes",
6071
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "list", Resource: "nodes"},
6072
-+			expect: authorizer.DecisionDeny,
6073
-+		},
6074
-+		{
6075
-+			name:   "denied: cross cluster node create nodes",
6076
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "node"},
6077
-+			expect: authorizer.DecisionDeny,
6078
-+		},
6079
-+		{
6080
-+			name:   "denied: cross cluster node update nodes",
6081
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "update", Resource: "nodes", Name: "node"},
6082
-+			expect: authorizer.DecisionDeny,
6083
-+		},
6084
-+		{
6085
-+			name:   "denied: cross cluster node delete nodes",
6086
-+			attrs:  authorizer.AttributesRecord{User: crossClusterNode, ResourceRequest: true, Verb: "delete", Resource: "nodes", Name: "node"},
6087
-+			expect: authorizer.DecisionDeny,
6088
-+		},
6089
-+
6090
-+		// Deny requests from invalid node.
6091
-+		{
6092
-+			name:   "denied: invalid worker get pod",
6093
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "get", Resource: "pods", Name: "pod", Namespace: "ns"},
6094
-+			expect: authorizer.DecisionDeny,
6095
-+		},
6096
-+		{
6097
-+			name:   "denied: invalid worker list pod",
6098
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "list", Resource: "pods", Namespace: "ns"},
6099
-+			expect: authorizer.DecisionDeny,
6100
-+		},
6101
-+		{
6102
-+			name:   "denied: invalid worker create pod",
6103
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "create", Resource: "pods", Name: "pod", Namespace: "ns"},
6104
-+			expect: authorizer.DecisionDeny,
6105
-+		},
6106
-+		{
6107
-+			name:   "denied: invalid worker update pod",
6108
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "update", Resource: "pods", Name: "pod", Namespace: "ns"},
6109
-+			expect: authorizer.DecisionDeny,
6110
-+		},
6111
-+		{
6112
-+			name:   "denied: invalid worker delete pod",
6113
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "delete", Resource: "pods", Name: "pod", Namespace: "ns"},
6114
-+			expect: authorizer.DecisionDeny,
6115
-+		},
6116
-+		{
6117
-+			name:   "denied: invalid worker get node",
6118
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "get", Resource: "nodes", Name: "node"},
6119
-+			expect: authorizer.DecisionDeny,
6120
-+		},
6121
-+		{
6122
-+			name:   "denied: invalid worker list nodes",
6123
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "list", Resource: "nodes"},
6124
-+			expect: authorizer.DecisionDeny,
6125
-+		},
6126
-+		{
6127
-+			name:   "denied: invalid worker create nodes",
6128
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "node"},
6129
-+			expect: authorizer.DecisionDeny,
6130
-+		},
6131
-+		{
6132
-+			name:   "denied: invalid worker update nodes",
6133
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "update", Resource: "nodes", Name: "node"},
6134
-+			expect: authorizer.DecisionDeny,
6135
-+		},
6136
-+		{
6137
-+			name:   "denied: invalid worker delete nodes",
6138
-+			attrs:  authorizer.AttributesRecord{User: invalidWorker, ResourceRequest: true, Verb: "delete", Resource: "nodes", Name: "node"},
6139
-+			expect: authorizer.DecisionDeny,
6140
-+		},
6141
-+
6142
-+		// Deny exec, run and attach operation on master nodes using proxy resource.
6143
-+		{
6144
-+			name:   "denied: attach using proxy resource on master",
6145
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "master-0", Path: masterProxyAttachPath},
6146
-+			expect: authorizer.DecisionDeny,
6147
-+		},
6148
-+		{
6149
-+			name:   "denied: exec using proxy resource on master",
6150
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "master-0", Path: masterProxyExecPath},
6151
-+			expect: authorizer.DecisionDeny,
6152
-+		},
6153
-+		{
6154
-+			name:   "denied: run using proxy resource on master",
6155
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "master-0", Path: masterProxyRunPath},
6156
-+			expect: authorizer.DecisionDeny,
6157
-+		},
6158
-+
6159
-+		// Do not deny exec, run and attach operation on worker nodes using proxy resource.
6160
-+		{
6161
-+			name:   "allowed: attach using proxy resource on worker",
6162
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "worker-0", Path: workerProxyAttachPath},
6163
-+			expect: authorizer.DecisionNoOpinion,
6164
-+		},
6165
-+		{
6166
-+			name:   "allowed: exec using proxy resource on worker",
6167
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "worker-0", Path: workerProxyExecPath},
6168
-+			expect: authorizer.DecisionNoOpinion,
6169
-+		},
6170
-+		{
6171
-+			name:   "allowed: run using proxy resource on worker",
6172
-+			attrs:  authorizer.AttributesRecord{User: clusterNode, ResourceRequest: true, Verb: "create", Resource: "nodes", Name: "worker-0", Path: workerProxyRunPath},
6173
-+			expect: authorizer.DecisionNoOpinion,
6174
-+		},
6175
-+	}
6176
-+
6177
-+	for _, tc := range tests {
6178
-+		t.Run(tc.name, func(t *testing.T) {
6179
-+			decision, _, _ := authz.Authorize(tc.attrs)
6180
-+			if decision != tc.expect {
6181
-+				t.Errorf("expected %v, got %v", tc.expect, decision)
6182
-+			}
6183
-+		})
6184
-+	}
6185
-+}
6186
-diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go
6187
-index a809ceb..f27250e 100644
6188
-+++ b/staging/src/k8s.io/api/core/v1/generated.pb.go
6189
-@@ -35,6 +35,7 @@ limitations under the License.
6190
- 		Binding
6191
- 		CSIPersistentVolumeSource
6192
- 		Capabilities
6193
-+		CascadeDiskVolumeSource
6194
- 		CephFSPersistentVolumeSource
6195
- 		CephFSVolumeSource
6196
- 		CinderPersistentVolumeSource
6197
-@@ -296,800 +297,806 @@ func (m *Capabilities) Reset()                    { *m = Capabilities{} }
6198
- func (*Capabilities) ProtoMessage()               {}
6199
- func (*Capabilities) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} }
6200
- 
6201
-+func (m *CascadeDiskVolumeSource) Reset()      { *m = CascadeDiskVolumeSource{} }
6202
-+func (*CascadeDiskVolumeSource) ProtoMessage() {}
6203
-+func (*CascadeDiskVolumeSource) Descriptor() ([]byte, []int) {
6204
-+	return fileDescriptorGenerated, []int{10}
6205
-+}
6206
-+
6207
- func (m *CephFSPersistentVolumeSource) Reset()      { *m = CephFSPersistentVolumeSource{} }
6208
- func (*CephFSPersistentVolumeSource) ProtoMessage() {}
6209
- func (*CephFSPersistentVolumeSource) Descriptor() ([]byte, []int) {
6210
--	return fileDescriptorGenerated, []int{10}
6211
-+	return fileDescriptorGenerated, []int{11}
6212
- }
6213
- 
6214
- func (m *CephFSVolumeSource) Reset()                    { *m = CephFSVolumeSource{} }
6215
- func (*CephFSVolumeSource) ProtoMessage()               {}
6216
--func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} }
6217
-+func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} }
6218
- 
6219
- func (m *CinderPersistentVolumeSource) Reset()      { *m = CinderPersistentVolumeSource{} }
6220
- func (*CinderPersistentVolumeSource) ProtoMessage() {}
6221
- func (*CinderPersistentVolumeSource) Descriptor() ([]byte, []int) {
6222
--	return fileDescriptorGenerated, []int{12}
6223
-+	return fileDescriptorGenerated, []int{13}
6224
- }
6225
- 
6226
- func (m *CinderVolumeSource) Reset()                    { *m = CinderVolumeSource{} }
6227
- func (*CinderVolumeSource) ProtoMessage()               {}
6228
--func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} }
6229
-+func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} }
6230
- 
6231
- func (m *ClientIPConfig) Reset()                    { *m = ClientIPConfig{} }
6232
- func (*ClientIPConfig) ProtoMessage()               {}
6233
--func (*ClientIPConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} }
6234
-+func (*ClientIPConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} }
6235
- 
6236
- func (m *ComponentCondition) Reset()                    { *m = ComponentCondition{} }
6237
- func (*ComponentCondition) ProtoMessage()               {}
6238
--func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} }
6239
-+func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} }
6240
- 
6241
- func (m *ComponentStatus) Reset()                    { *m = ComponentStatus{} }
6242
- func (*ComponentStatus) ProtoMessage()               {}
6243
--func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} }
6244
-+func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} }
6245
- 
6246
- func (m *ComponentStatusList) Reset()                    { *m = ComponentStatusList{} }
6247
- func (*ComponentStatusList) ProtoMessage()               {}
6248
--func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} }
6249
-+func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} }
6250
- 
6251
- func (m *ConfigMap) Reset()                    { *m = ConfigMap{} }
6252
- func (*ConfigMap) ProtoMessage()               {}
6253
--func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} }
6254
-+func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
6255
- 
6256
- func (m *ConfigMapEnvSource) Reset()                    { *m = ConfigMapEnvSource{} }
6257
- func (*ConfigMapEnvSource) ProtoMessage()               {}
6258
--func (*ConfigMapEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} }
6259
-+func (*ConfigMapEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} }
6260
- 
6261
- func (m *ConfigMapKeySelector) Reset()                    { *m = ConfigMapKeySelector{} }
6262
- func (*ConfigMapKeySelector) ProtoMessage()               {}
6263
--func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} }
6264
-+func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} }
6265
- 
6266
- func (m *ConfigMapList) Reset()                    { *m = ConfigMapList{} }
6267
- func (*ConfigMapList) ProtoMessage()               {}
6268
--func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} }
6269
-+func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} }
6270
- 
6271
- func (m *ConfigMapNodeConfigSource) Reset()      { *m = ConfigMapNodeConfigSource{} }
6272
- func (*ConfigMapNodeConfigSource) ProtoMessage() {}
6273
- func (*ConfigMapNodeConfigSource) Descriptor() ([]byte, []int) {
6274
--	return fileDescriptorGenerated, []int{22}
6275
-+	return fileDescriptorGenerated, []int{23}
6276
- }
6277
- 
6278
- func (m *ConfigMapProjection) Reset()                    { *m = ConfigMapProjection{} }
6279
- func (*ConfigMapProjection) ProtoMessage()               {}
6280
--func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} }
6281
-+func (*ConfigMapProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
6282
- 
6283
- func (m *ConfigMapVolumeSource) Reset()                    { *m = ConfigMapVolumeSource{} }
6284
- func (*ConfigMapVolumeSource) ProtoMessage()               {}
6285
--func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} }
6286
-+func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
6287
- 
6288
- func (m *Container) Reset()                    { *m = Container{} }
6289
- func (*Container) ProtoMessage()               {}
6290
--func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} }
6291
-+func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
6292
- 
6293
- func (m *ContainerImage) Reset()                    { *m = ContainerImage{} }
6294
- func (*ContainerImage) ProtoMessage()               {}
6295
--func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} }
6296
-+func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
6297
- 
6298
- func (m *ContainerPort) Reset()                    { *m = ContainerPort{} }
6299
- func (*ContainerPort) ProtoMessage()               {}
6300
--func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} }
6301
-+func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
6302
- 
6303
- func (m *ContainerState) Reset()                    { *m = ContainerState{} }
6304
- func (*ContainerState) ProtoMessage()               {}
6305
--func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} }
6306
-+func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} }
6307
- 
6308
- func (m *ContainerStateRunning) Reset()                    { *m = ContainerStateRunning{} }
6309
- func (*ContainerStateRunning) ProtoMessage()               {}
6310
--func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} }
6311
-+func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} }
6312
- 
6313
- func (m *ContainerStateTerminated) Reset()      { *m = ContainerStateTerminated{} }
6314
- func (*ContainerStateTerminated) ProtoMessage() {}
6315
- func (*ContainerStateTerminated) Descriptor() ([]byte, []int) {
6316
--	return fileDescriptorGenerated, []int{30}
6317
-+	return fileDescriptorGenerated, []int{31}
6318
- }
6319
- 
6320
- func (m *ContainerStateWaiting) Reset()                    { *m = ContainerStateWaiting{} }
6321
- func (*ContainerStateWaiting) ProtoMessage()               {}
6322
--func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} }
6323
-+func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} }
6324
- 
6325
- func (m *ContainerStatus) Reset()                    { *m = ContainerStatus{} }
6326
- func (*ContainerStatus) ProtoMessage()               {}
6327
--func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} }
6328
-+func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} }
6329
- 
6330
- func (m *DaemonEndpoint) Reset()                    { *m = DaemonEndpoint{} }
6331
- func (*DaemonEndpoint) ProtoMessage()               {}
6332
--func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} }
6333
-+func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} }
6334
- 
6335
- func (m *DownwardAPIProjection) Reset()                    { *m = DownwardAPIProjection{} }
6336
- func (*DownwardAPIProjection) ProtoMessage()               {}
6337
--func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} }
6338
-+func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} }
6339
- 
6340
- func (m *DownwardAPIVolumeFile) Reset()                    { *m = DownwardAPIVolumeFile{} }
6341
- func (*DownwardAPIVolumeFile) ProtoMessage()               {}
6342
--func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} }
6343
-+func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} }
6344
- 
6345
- func (m *DownwardAPIVolumeSource) Reset()      { *m = DownwardAPIVolumeSource{} }
6346
- func (*DownwardAPIVolumeSource) ProtoMessage() {}
6347
- func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) {
6348
--	return fileDescriptorGenerated, []int{36}
6349
-+	return fileDescriptorGenerated, []int{37}
6350
- }
6351
- 
6352
- func (m *EmptyDirVolumeSource) Reset()                    { *m = EmptyDirVolumeSource{} }
6353
- func (*EmptyDirVolumeSource) ProtoMessage()               {}
6354
--func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} }
6355
-+func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} }
6356
- 
6357
- func (m *EndpointAddress) Reset()                    { *m = EndpointAddress{} }
6358
- func (*EndpointAddress) ProtoMessage()               {}
6359
--func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} }
6360
-+func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} }
6361
- 
6362
- func (m *EndpointPort) Reset()                    { *m = EndpointPort{} }
6363
- func (*EndpointPort) ProtoMessage()               {}
6364
--func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} }
6365
-+func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} }
6366
- 
6367
- func (m *EndpointSubset) Reset()                    { *m = EndpointSubset{} }
6368
- func (*EndpointSubset) ProtoMessage()               {}
6369
--func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} }
6370
-+func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} }
6371
- 
6372
- func (m *Endpoints) Reset()                    { *m = Endpoints{} }
6373
- func (*Endpoints) ProtoMessage()               {}
6374
--func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} }
6375
-+func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} }
6376
- 
6377
- func (m *EndpointsList) Reset()                    { *m = EndpointsList{} }
6378
- func (*EndpointsList) ProtoMessage()               {}
6379
--func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} }
6380
-+func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} }
6381
- 
6382
- func (m *EnvFromSource) Reset()                    { *m = EnvFromSource{} }
6383
- func (*EnvFromSource) ProtoMessage()               {}
6384
--func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} }
6385
-+func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} }
6386
- 
6387
- func (m *EnvVar) Reset()                    { *m = EnvVar{} }
6388
- func (*EnvVar) ProtoMessage()               {}
6389
--func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} }
6390
-+func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} }
6391
- 
6392
- func (m *EnvVarSource) Reset()                    { *m = EnvVarSource{} }
6393
- func (*EnvVarSource) ProtoMessage()               {}
6394
--func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} }
6395
-+func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} }
6396
- 
6397
- func (m *Event) Reset()                    { *m = Event{} }
6398
- func (*Event) ProtoMessage()               {}
6399
--func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} }
6400
-+func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} }
6401
- 
6402
- func (m *EventList) Reset()                    { *m = EventList{} }
6403
- func (*EventList) ProtoMessage()               {}
6404
--func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} }
6405
-+func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} }
6406
- 
6407
- func (m *EventSeries) Reset()                    { *m = EventSeries{} }
6408
- func (*EventSeries) ProtoMessage()               {}
6409
--func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} }
6410
-+func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} }
6411
- 
6412
- func (m *EventSource) Reset()                    { *m = EventSource{} }
6413
- func (*EventSource) ProtoMessage()               {}
6414
--func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} }
6415
-+func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} }
6416
- 
6417
- func (m *ExecAction) Reset()                    { *m = ExecAction{} }
6418
- func (*ExecAction) ProtoMessage()               {}
6419
--func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} }
6420
-+func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} }
6421
- 
6422
- func (m *FCVolumeSource) Reset()                    { *m = FCVolumeSource{} }
6423
- func (*FCVolumeSource) ProtoMessage()               {}
6424
--func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} }
6425
-+func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} }
6426
- 
6427
- func (m *FlexPersistentVolumeSource) Reset()      { *m = FlexPersistentVolumeSource{} }
6428
- func (*FlexPersistentVolumeSource) ProtoMessage() {}
6429
- func (*FlexPersistentVolumeSource) Descriptor() ([]byte, []int) {
6430
--	return fileDescriptorGenerated, []int{52}
6431
-+	return fileDescriptorGenerated, []int{53}
6432
- }
6433
- 
6434
- func (m *FlexVolumeSource) Reset()                    { *m = FlexVolumeSource{} }
6435
- func (*FlexVolumeSource) ProtoMessage()               {}
6436
--func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} }
6437
-+func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} }
6438
- 
6439
- func (m *FlockerVolumeSource) Reset()                    { *m = FlockerVolumeSource{} }
6440
- func (*FlockerVolumeSource) ProtoMessage()               {}
6441
--func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} }
6442
-+func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} }
6443
- 
6444
- func (m *GCEPersistentDiskVolumeSource) Reset()      { *m = GCEPersistentDiskVolumeSource{} }
6445
- func (*GCEPersistentDiskVolumeSource) ProtoMessage() {}
6446
- func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) {
6447
--	return fileDescriptorGenerated, []int{55}
6448
-+	return fileDescriptorGenerated, []int{56}
6449
- }
6450
- 
6451
- func (m *GitRepoVolumeSource) Reset()                    { *m = GitRepoVolumeSource{} }
6452
- func (*GitRepoVolumeSource) ProtoMessage()               {}
6453
--func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} }
6454
-+func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} }
6455
- 
6456
- func (m *GlusterfsVolumeSource) Reset()                    { *m = GlusterfsVolumeSource{} }
6457
- func (*GlusterfsVolumeSource) ProtoMessage()               {}
6458
--func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} }
6459
-+func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} }
6460
- 
6461
- func (m *HTTPGetAction) Reset()                    { *m = HTTPGetAction{} }
6462
- func (*HTTPGetAction) ProtoMessage()               {}
6463
--func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} }
6464
-+func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} }
6465
- 
6466
- func (m *HTTPHeader) Reset()                    { *m = HTTPHeader{} }
6467
- func (*HTTPHeader) ProtoMessage()               {}
6468
--func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} }
6469
-+func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} }
6470
- 
6471
- func (m *Handler) Reset()                    { *m = Handler{} }
6472
- func (*Handler) ProtoMessage()               {}
6473
--func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} }
6474
-+func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} }
6475
- 
6476
- func (m *HostAlias) Reset()                    { *m = HostAlias{} }
6477
- func (*HostAlias) ProtoMessage()               {}
6478
--func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} }
6479
-+func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} }
6480
- 
6481
- func (m *HostPathVolumeSource) Reset()                    { *m = HostPathVolumeSource{} }
6482
- func (*HostPathVolumeSource) ProtoMessage()               {}
6483
--func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} }
6484
-+func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} }
6485
- 
6486
- func (m *ISCSIPersistentVolumeSource) Reset()      { *m = ISCSIPersistentVolumeSource{} }
6487
- func (*ISCSIPersistentVolumeSource) ProtoMessage() {}
6488
- func (*ISCSIPersistentVolumeSource) Descriptor() ([]byte, []int) {
6489
--	return fileDescriptorGenerated, []int{63}
6490
-+	return fileDescriptorGenerated, []int{64}
6491
- }
6492
- 
6493
- func (m *ISCSIVolumeSource) Reset()                    { *m = ISCSIVolumeSource{} }
6494
- func (*ISCSIVolumeSource) ProtoMessage()               {}
6495
--func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} }
6496
-+func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} }
6497
- 
6498
- func (m *KeyToPath) Reset()                    { *m = KeyToPath{} }
6499
- func (*KeyToPath) ProtoMessage()               {}
6500
--func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} }
6501
-+func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} }
6502
- 
6503
- func (m *Lifecycle) Reset()                    { *m = Lifecycle{} }
6504
- func (*Lifecycle) ProtoMessage()               {}
6505
--func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} }
6506
-+func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} }
6507
- 
6508
- func (m *LimitRange) Reset()                    { *m = LimitRange{} }
6509
- func (*LimitRange) ProtoMessage()               {}
6510
--func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} }
6511
-+func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} }
6512
- 
6513
- func (m *LimitRangeItem) Reset()                    { *m = LimitRangeItem{} }
6514
- func (*LimitRangeItem) ProtoMessage()               {}
6515
--func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} }
6516
-+func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} }
6517
- 
6518
- func (m *LimitRangeList) Reset()                    { *m = LimitRangeList{} }
6519
- func (*LimitRangeList) ProtoMessage()               {}
6520
--func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} }
6521
-+func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} }
6522
- 
6523
- func (m *LimitRangeSpec) Reset()                    { *m = LimitRangeSpec{} }
6524
- func (*LimitRangeSpec) ProtoMessage()               {}
6525
--func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} }
6526
-+func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} }
6527
- 
6528
- func (m *List) Reset()                    { *m = List{} }
6529
- func (*List) ProtoMessage()               {}
6530
--func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} }
6531
-+func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} }
6532
- 
6533
- func (m *LoadBalancerIngress) Reset()                    { *m = LoadBalancerIngress{} }
6534
- func (*LoadBalancerIngress) ProtoMessage()               {}
6535
--func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} }
6536
-+func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} }
6537
- 
6538
- func (m *LoadBalancerStatus) Reset()                    { *m = LoadBalancerStatus{} }
6539
- func (*LoadBalancerStatus) ProtoMessage()               {}
6540
--func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} }
6541
-+func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} }
6542
- 
6543
- func (m *LocalObjectReference) Reset()                    { *m = LocalObjectReference{} }
6544
- func (*LocalObjectReference) ProtoMessage()               {}
6545
--func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} }
6546
-+func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} }
6547
- 
6548
- func (m *LocalVolumeSource) Reset()                    { *m = LocalVolumeSource{} }
6549
- func (*LocalVolumeSource) ProtoMessage()               {}
6550
--func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} }
6551
-+func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} }
6552
- 
6553
- func (m *NFSVolumeSource) Reset()                    { *m = NFSVolumeSource{} }
6554
- func (*NFSVolumeSource) ProtoMessage()               {}
6555
--func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} }
6556
-+func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} }
6557
- 
6558
- func (m *Namespace) Reset()                    { *m = Namespace{} }
6559
- func (*Namespace) ProtoMessage()               {}
6560
--func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} }
6561
-+func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} }
6562
- 
6563
- func (m *NamespaceList) Reset()                    { *m = NamespaceList{} }
6564
- func (*NamespaceList) ProtoMessage()               {}
6565
--func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} }
6566
-+func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} }
6567
- 
6568
- func (m *NamespaceSpec) Reset()                    { *m = NamespaceSpec{} }
6569
- func (*NamespaceSpec) ProtoMessage()               {}
6570
--func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} }
6571
-+func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} }
6572
- 
6573
- func (m *NamespaceStatus) Reset()                    { *m = NamespaceStatus{} }
6574
- func (*NamespaceStatus) ProtoMessage()               {}
6575
--func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} }
6576
-+func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} }
6577
- 
6578
- func (m *Node) Reset()                    { *m = Node{} }
6579
- func (*Node) ProtoMessage()               {}
6580
--func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} }
6581
-+func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} }
6582
- 
6583
- func (m *NodeAddress) Reset()                    { *m = NodeAddress{} }
6584
- func (*NodeAddress) ProtoMessage()               {}
6585
--func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} }
6586
-+func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} }
6587
- 
6588
- func (m *NodeAffinity) Reset()                    { *m = NodeAffinity{} }
6589
- func (*NodeAffinity) ProtoMessage()               {}
6590
--func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} }
6591
-+func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} }
6592
- 
6593
- func (m *NodeCondition) Reset()                    { *m = NodeCondition{} }
6594
- func (*NodeCondition) ProtoMessage()               {}
6595
--func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} }
6596
-+func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} }
6597
- 
6598
- func (m *NodeConfigSource) Reset()                    { *m = NodeConfigSource{} }
6599
- func (*NodeConfigSource) ProtoMessage()               {}
6600
--func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} }
6601
-+func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} }
6602
- 
6603
- func (m *NodeConfigStatus) Reset()                    { *m = NodeConfigStatus{} }
6604
- func (*NodeConfigStatus) ProtoMessage()               {}
6605
--func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} }
6606
-+func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} }
6607
- 
6608
- func (m *NodeDaemonEndpoints) Reset()                    { *m = NodeDaemonEndpoints{} }
6609
- func (*NodeDaemonEndpoints) ProtoMessage()               {}
6610
--func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} }
6611
-+func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} }
6612
- 
6613
- func (m *NodeList) Reset()                    { *m = NodeList{} }
6614
- func (*NodeList) ProtoMessage()               {}
6615
--func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} }
6616
-+func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} }
6617
- 
6618
- func (m *NodeProxyOptions) Reset()                    { *m = NodeProxyOptions{} }
6619
- func (*NodeProxyOptions) ProtoMessage()               {}
6620
--func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} }
6621
-+func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} }
6622
- 
6623
- func (m *NodeResources) Reset()                    { *m = NodeResources{} }
6624
- func (*NodeResources) ProtoMessage()               {}
6625
--func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} }
6626
-+func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} }
6627
- 
6628
- func (m *NodeSelector) Reset()                    { *m = NodeSelector{} }
6629
- func (*NodeSelector) ProtoMessage()               {}
6630
--func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} }
6631
-+func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} }
6632
- 
6633
- func (m *NodeSelectorRequirement) Reset()      { *m = NodeSelectorRequirement{} }
6634
- func (*NodeSelectorRequirement) ProtoMessage() {}
6635
- func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) {
6636
--	return fileDescriptorGenerated, []int{92}
6637
-+	return fileDescriptorGenerated, []int{93}
6638
- }
6639
- 
6640
- func (m *NodeSelectorTerm) Reset()                    { *m = NodeSelectorTerm{} }
6641
- func (*NodeSelectorTerm) ProtoMessage()               {}
6642
--func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} }
6643
-+func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} }
6644
- 
6645
- func (m *NodeSpec) Reset()                    { *m = NodeSpec{} }
6646
- func (*NodeSpec) ProtoMessage()               {}
6647
--func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} }
6648
-+func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} }
6649
- 
6650
- func (m *NodeStatus) Reset()                    { *m = NodeStatus{} }
6651
- func (*NodeStatus) ProtoMessage()               {}
6652
--func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} }
6653
-+func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} }
6654
- 
6655
- func (m *NodeSystemInfo) Reset()                    { *m = NodeSystemInfo{} }
6656
- func (*NodeSystemInfo) ProtoMessage()               {}
6657
--func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} }
6658
-+func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} }
6659
- 
6660
- func (m *ObjectFieldSelector) Reset()                    { *m = ObjectFieldSelector{} }
6661
- func (*ObjectFieldSelector) ProtoMessage()               {}
6662
--func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} }
6663
-+func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} }
6664
- 
6665
- func (m *ObjectReference) Reset()                    { *m = ObjectReference{} }
6666
- func (*ObjectReference) ProtoMessage()               {}
6667
--func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} }
6668
-+func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} }
6669
- 
6670
- func (m *PersistentVolume) Reset()                    { *m = PersistentVolume{} }
6671
- func (*PersistentVolume) ProtoMessage()               {}
6672
--func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} }
6673
-+func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} }
6674
- 
6675
- func (m *PersistentVolumeClaim) Reset()                    { *m = PersistentVolumeClaim{} }
6676
- func (*PersistentVolumeClaim) ProtoMessage()               {}
6677
--func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} }
6678
-+func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} }
6679
- 
6680
- func (m *PersistentVolumeClaimCondition) Reset()      { *m = PersistentVolumeClaimCondition{} }
6681
- func (*PersistentVolumeClaimCondition) ProtoMessage() {}
6682
- func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) {
6683
--	return fileDescriptorGenerated, []int{101}
6684
-+	return fileDescriptorGenerated, []int{102}
6685
- }
6686
- 
6687
- func (m *PersistentVolumeClaimList) Reset()      { *m = PersistentVolumeClaimList{} }
6688
- func (*PersistentVolumeClaimList) ProtoMessage() {}
6689
- func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) {
6690
--	return fileDescriptorGenerated, []int{102}
6691
-+	return fileDescriptorGenerated, []int{103}
6692
- }
6693
- 
6694
- func (m *PersistentVolumeClaimSpec) Reset()      { *m = PersistentVolumeClaimSpec{} }
6695
- func (*PersistentVolumeClaimSpec) ProtoMessage() {}
6696
- func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) {
6697
--	return fileDescriptorGenerated, []int{103}
6698
-+	return fileDescriptorGenerated, []int{104}
6699
- }
6700
- 
6701
- func (m *PersistentVolumeClaimStatus) Reset()      { *m = PersistentVolumeClaimStatus{} }
6702
- func (*PersistentVolumeClaimStatus) ProtoMessage() {}
6703
- func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) {
6704
--	return fileDescriptorGenerated, []int{104}
6705
-+	return fileDescriptorGenerated, []int{105}
6706
- }
6707
- 
6708
- func (m *PersistentVolumeClaimVolumeSource) Reset()      { *m = PersistentVolumeClaimVolumeSource{} }
6709
- func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {}
6710
- func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) {
6711
--	return fileDescriptorGenerated, []int{105}
6712
-+	return fileDescriptorGenerated, []int{106}
6713
- }
6714
- 
6715
- func (m *PersistentVolumeList) Reset()                    { *m = PersistentVolumeList{} }
6716
- func (*PersistentVolumeList) ProtoMessage()               {}
6717
--func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} }
6718
-+func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} }
6719
- 
6720
- func (m *PersistentVolumeSource) Reset()      { *m = PersistentVolumeSource{} }
6721
- func (*PersistentVolumeSource) ProtoMessage() {}
6722
- func (*PersistentVolumeSource) Descriptor() ([]byte, []int) {
6723
--	return fileDescriptorGenerated, []int{107}
6724
-+	return fileDescriptorGenerated, []int{108}
6725
- }
6726
- 
6727
- func (m *PersistentVolumeSpec) Reset()                    { *m = PersistentVolumeSpec{} }
6728
- func (*PersistentVolumeSpec) ProtoMessage()               {}
6729
--func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} }
6730
-+func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} }
6731
- 
6732
- func (m *PersistentVolumeStatus) Reset()      { *m = PersistentVolumeStatus{} }
6733
- func (*PersistentVolumeStatus) ProtoMessage() {}
6734
- func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) {
6735
--	return fileDescriptorGenerated, []int{109}
6736
-+	return fileDescriptorGenerated, []int{110}
6737
- }
6738
- 
6739
- func (m *PhotonPersistentDiskVolumeSource) Reset()      { *m = PhotonPersistentDiskVolumeSource{} }
6740
- func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {}
6741
- func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) {
6742
--	return fileDescriptorGenerated, []int{110}
6743
-+	return fileDescriptorGenerated, []int{111}
6744
- }
6745
- 
6746
- func (m *Pod) Reset()                    { *m = Pod{} }
6747
- func (*Pod) ProtoMessage()               {}
6748
--func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} }
6749
-+func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} }
6750
- 
6751
- func (m *PodAffinity) Reset()                    { *m = PodAffinity{} }
6752
- func (*PodAffinity) ProtoMessage()               {}
6753
--func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} }
6754
-+func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} }
6755
- 
6756
- func (m *PodAffinityTerm) Reset()                    { *m = PodAffinityTerm{} }
6757
- func (*PodAffinityTerm) ProtoMessage()               {}
6758
--func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} }
6759
-+func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} }
6760
- 
6761
- func (m *PodAntiAffinity) Reset()                    { *m = PodAntiAffinity{} }
6762
- func (*PodAntiAffinity) ProtoMessage()               {}
6763
--func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} }
6764
-+func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} }
6765
- 
6766
- func (m *PodAttachOptions) Reset()                    { *m = PodAttachOptions{} }
6767
- func (*PodAttachOptions) ProtoMessage()               {}
6768
--func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} }
6769
-+func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} }
6770
- 
6771
- func (m *PodCondition) Reset()                    { *m = PodCondition{} }
6772
- func (*PodCondition) ProtoMessage()               {}
6773
--func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} }
6774
-+func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} }
6775
- 
6776
- func (m *PodDNSConfig) Reset()                    { *m = PodDNSConfig{} }
6777
- func (*PodDNSConfig) ProtoMessage()               {}
6778
--func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} }
6779
-+func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} }
6780
- 
6781
- func (m *PodDNSConfigOption) Reset()                    { *m = PodDNSConfigOption{} }
6782
- func (*PodDNSConfigOption) ProtoMessage()               {}
6783
--func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} }
6784
-+func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} }
6785
- 
6786
- func (m *PodExecOptions) Reset()                    { *m = PodExecOptions{} }
6787
- func (*PodExecOptions) ProtoMessage()               {}
6788
--func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} }
6789
-+func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} }
6790
- 
6791
- func (m *PodList) Reset()                    { *m = PodList{} }
6792
- func (*PodList) ProtoMessage()               {}
6793
--func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} }
6794
-+func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} }
6795
- 
6796
- func (m *PodLogOptions) Reset()                    { *m = PodLogOptions{} }
6797
- func (*PodLogOptions) ProtoMessage()               {}
6798
--func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} }
6799
-+func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} }
6800
- 
6801
- func (m *PodPortForwardOptions) Reset()                    { *m = PodPortForwardOptions{} }
6802
- func (*PodPortForwardOptions) ProtoMessage()               {}
6803
--func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} }
6804
-+func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} }
6805
- 
6806
- func (m *PodProxyOptions) Reset()                    { *m = PodProxyOptions{} }
6807
- func (*PodProxyOptions) ProtoMessage()               {}
6808
--func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} }
6809
-+func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} }
6810
- 
6811
- func (m *PodReadinessGate) Reset()                    { *m = PodReadinessGate{} }
6812
- func (*PodReadinessGate) ProtoMessage()               {}
6813
--func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} }
6814
-+func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} }
6815
- 
6816
- func (m *PodSecurityContext) Reset()                    { *m = PodSecurityContext{} }
6817
- func (*PodSecurityContext) ProtoMessage()               {}
6818
--func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} }
6819
-+func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} }
6820
- 
6821
- func (m *PodSignature) Reset()                    { *m = PodSignature{} }
6822
- func (*PodSignature) ProtoMessage()               {}
6823
--func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} }
6824
-+func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} }
6825
- 
6826
- func (m *PodSpec) Reset()                    { *m = PodSpec{} }
6827
- func (*PodSpec) ProtoMessage()               {}
6828
--func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} }
6829
-+func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} }
6830
- 
6831
- func (m *PodStatus) Reset()                    { *m = PodStatus{} }
6832
- func (*PodStatus) ProtoMessage()               {}
6833
--func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} }
6834
-+func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} }
6835
- 
6836
- func (m *PodStatusResult) Reset()                    { *m = PodStatusResult{} }
6837
- func (*PodStatusResult) ProtoMessage()               {}
6838
--func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} }
6839
-+func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} }
6840
- 
6841
- func (m *PodTemplate) Reset()                    { *m = PodTemplate{} }
6842
- func (*PodTemplate) ProtoMessage()               {}
6843
--func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} }
6844
-+func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} }
6845
- 
6846
- func (m *PodTemplateList) Reset()                    { *m = PodTemplateList{} }
6847
- func (*PodTemplateList) ProtoMessage()               {}
6848
--func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} }
6849
-+func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} }
6850
- 
6851
- func (m *PodTemplateSpec) Reset()                    { *m = PodTemplateSpec{} }
6852
- func (*PodTemplateSpec) ProtoMessage()               {}
6853
--func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} }
6854
-+func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} }
6855
- 
6856
- func (m *PortworxVolumeSource) Reset()                    { *m = PortworxVolumeSource{} }
6857
- func (*PortworxVolumeSource) ProtoMessage()               {}
6858
--func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} }
6859
-+func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} }
6860
- 
6861
- func (m *Preconditions) Reset()                    { *m = Preconditions{} }
6862
- func (*Preconditions) ProtoMessage()               {}
6863
--func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} }
6864
-+func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} }
6865
- 
6866
- func (m *PreferAvoidPodsEntry) Reset()                    { *m = PreferAvoidPodsEntry{} }
6867
- func (*PreferAvoidPodsEntry) ProtoMessage()               {}
6868
--func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} }
6869
-+func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} }
6870
- 
6871
- func (m *PreferredSchedulingTerm) Reset()      { *m = PreferredSchedulingTerm{} }
6872
- func (*PreferredSchedulingTerm) ProtoMessage() {}
6873
- func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) {
6874
--	return fileDescriptorGenerated, []int{136}
6875
-+	return fileDescriptorGenerated, []int{137}
6876
- }
6877
- 
6878
- func (m *Probe) Reset()                    { *m = Probe{} }
6879
- func (*Probe) ProtoMessage()               {}
6880
--func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} }
6881
-+func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} }
6882
- 
6883
- func (m *ProjectedVolumeSource) Reset()                    { *m = ProjectedVolumeSource{} }
6884
- func (*ProjectedVolumeSource) ProtoMessage()               {}
6885
--func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} }
6886
-+func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} }
6887
- 
6888
- func (m *QuobyteVolumeSource) Reset()                    { *m = QuobyteVolumeSource{} }
6889
- func (*QuobyteVolumeSource) ProtoMessage()               {}
6890
--func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} }
6891
-+func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} }
6892
- 
6893
- func (m *RBDPersistentVolumeSource) Reset()      { *m = RBDPersistentVolumeSource{} }
6894
- func (*RBDPersistentVolumeSource) ProtoMessage() {}
6895
- func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) {
6896
--	return fileDescriptorGenerated, []int{140}
6897
-+	return fileDescriptorGenerated, []int{141}
6898
- }
6899
- 
6900
- func (m *RBDVolumeSource) Reset()                    { *m = RBDVolumeSource{} }
6901
- func (*RBDVolumeSource) ProtoMessage()               {}
6902
--func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} }
6903
-+func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} }
6904
- 
6905
- func (m *RangeAllocation) Reset()                    { *m = RangeAllocation{} }
6906
- func (*RangeAllocation) ProtoMessage()               {}
6907
--func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} }
6908
-+func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} }
6909
- 
6910
- func (m *ReplicationController) Reset()                    { *m = ReplicationController{} }
6911
- func (*ReplicationController) ProtoMessage()               {}
6912
--func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} }
6913
-+func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} }
6914
- 
6915
- func (m *ReplicationControllerCondition) Reset()      { *m = ReplicationControllerCondition{} }
6916
- func (*ReplicationControllerCondition) ProtoMessage() {}
6917
- func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) {
6918
--	return fileDescriptorGenerated, []int{144}
6919
-+	return fileDescriptorGenerated, []int{145}
6920
- }
6921
- 
6922
- func (m *ReplicationControllerList) Reset()      { *m = ReplicationControllerList{} }
6923
- func (*ReplicationControllerList) ProtoMessage() {}
6924
- func (*ReplicationControllerList) Descriptor() ([]byte, []int) {
6925
--	return fileDescriptorGenerated, []int{145}
6926
-+	return fileDescriptorGenerated, []int{146}
6927
- }
6928
- 
6929
- func (m *ReplicationControllerSpec) Reset()      { *m = ReplicationControllerSpec{} }
6930
- func (*ReplicationControllerSpec) ProtoMessage() {}
6931
- func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) {
6932
--	return fileDescriptorGenerated, []int{146}
6933
-+	return fileDescriptorGenerated, []int{147}
6934
- }
6935
- 
6936
- func (m *ReplicationControllerStatus) Reset()      { *m = ReplicationControllerStatus{} }
6937
- func (*ReplicationControllerStatus) ProtoMessage() {}
6938
- func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) {
6939
--	return fileDescriptorGenerated, []int{147}
6940
-+	return fileDescriptorGenerated, []int{148}
6941
- }
6942
- 
6943
- func (m *ResourceFieldSelector) Reset()                    { *m = ResourceFieldSelector{} }
6944
- func (*ResourceFieldSelector) ProtoMessage()               {}
6945
--func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} }
6946
-+func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} }
6947
- 
6948
- func (m *ResourceQuota) Reset()                    { *m = ResourceQuota{} }
6949
- func (*ResourceQuota) ProtoMessage()               {}
6950
--func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} }
6951
-+func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} }
6952
- 
6953
- func (m *ResourceQuotaList) Reset()                    { *m = ResourceQuotaList{} }
6954
- func (*ResourceQuotaList) ProtoMessage()               {}
6955
--func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} }
6956
-+func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} }
6957
- 
6958
- func (m *ResourceQuotaSpec) Reset()                    { *m = ResourceQuotaSpec{} }
6959
- func (*ResourceQuotaSpec) ProtoMessage()               {}
6960
--func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} }
6961
-+func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} }
6962
- 
6963
- func (m *ResourceQuotaStatus) Reset()                    { *m = ResourceQuotaStatus{} }
6964
- func (*ResourceQuotaStatus) ProtoMessage()               {}
6965
--func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} }
6966
-+func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} }
6967
- 
6968
- func (m *ResourceRequirements) Reset()                    { *m = ResourceRequirements{} }
6969
- func (*ResourceRequirements) ProtoMessage()               {}
6970
--func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} }
6971
-+func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} }
6972
- 
6973
- func (m *SELinuxOptions) Reset()                    { *m = SELinuxOptions{} }
6974
- func (*SELinuxOptions) ProtoMessage()               {}
6975
--func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} }
6976
-+func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} }
6977
- 
6978
- func (m *ScaleIOPersistentVolumeSource) Reset()      { *m = ScaleIOPersistentVolumeSource{} }
6979
- func (*ScaleIOPersistentVolumeSource) ProtoMessage() {}
6980
- func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) {
6981
--	return fileDescriptorGenerated, []int{155}
6982
-+	return fileDescriptorGenerated, []int{156}
6983
- }
6984
- 
6985
- func (m *ScaleIOVolumeSource) Reset()                    { *m = ScaleIOVolumeSource{} }
6986
- func (*ScaleIOVolumeSource) ProtoMessage()               {}
6987
--func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} }
6988
-+func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} }
6989
- 
6990
- func (m *ScopeSelector) Reset()                    { *m = ScopeSelector{} }
6991
- func (*ScopeSelector) ProtoMessage()               {}
6992
--func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} }
6993
-+func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} }
6994
- 
6995
- func (m *ScopedResourceSelectorRequirement) Reset()      { *m = ScopedResourceSelectorRequirement{} }
6996
- func (*ScopedResourceSelectorRequirement) ProtoMessage() {}
6997
- func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) {
6998
--	return fileDescriptorGenerated, []int{158}
6999
-+	return fileDescriptorGenerated, []int{159}
7000
- }
7001
- 
7002
- func (m *Secret) Reset()                    { *m = Secret{} }
7003
- func (*Secret) ProtoMessage()               {}
7004
--func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} }
7005
-+func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} }
7006
- 
7007
- func (m *SecretEnvSource) Reset()                    { *m = SecretEnvSource{} }
7008
- func (*SecretEnvSource) ProtoMessage()               {}
7009
--func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} }
7010
-+func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} }
7011
- 
7012
- func (m *SecretKeySelector) Reset()                    { *m = SecretKeySelector{} }
7013
- func (*SecretKeySelector) ProtoMessage()               {}
7014
--func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} }
7015
-+func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} }
7016
- 
7017
- func (m *SecretList) Reset()                    { *m = SecretList{} }
7018
- func (*SecretList) ProtoMessage()               {}
7019
--func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} }
7020
-+func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} }
7021
- 
7022
- func (m *SecretProjection) Reset()                    { *m = SecretProjection{} }
7023
- func (*SecretProjection) ProtoMessage()               {}
7024
--func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} }
7025
-+func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} }
7026
- 
7027
- func (m *SecretReference) Reset()                    { *m = SecretReference{} }
7028
- func (*SecretReference) ProtoMessage()               {}
7029
--func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} }
7030
-+func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} }
7031
- 
7032
- func (m *SecretVolumeSource) Reset()                    { *m = SecretVolumeSource{} }
7033
- func (*SecretVolumeSource) ProtoMessage()               {}
7034
--func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} }
7035
-+func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} }
7036
- 
7037
- func (m *SecurityContext) Reset()                    { *m = SecurityContext{} }
7038
- func (*SecurityContext) ProtoMessage()               {}
7039
--func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} }
7040
-+func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} }
7041
- 
7042
- func (m *SerializedReference) Reset()                    { *m = SerializedReference{} }
7043
- func (*SerializedReference) ProtoMessage()               {}
7044
--func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} }
7045
-+func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} }
7046
- 
7047
- func (m *Service) Reset()                    { *m = Service{} }
7048
- func (*Service) ProtoMessage()               {}
7049
--func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} }
7050
-+func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} }
7051
- 
7052
- func (m *ServiceAccount) Reset()                    { *m = ServiceAccount{} }
7053
- func (*ServiceAccount) ProtoMessage()               {}
7054
--func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} }
7055
-+func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} }
7056
- 
7057
- func (m *ServiceAccountList) Reset()                    { *m = ServiceAccountList{} }
7058
- func (*ServiceAccountList) ProtoMessage()               {}
7059
--func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} }
7060
-+func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} }
7061
- 
7062
- func (m *ServiceAccountTokenProjection) Reset()      { *m = ServiceAccountTokenProjection{} }
7063
- func (*ServiceAccountTokenProjection) ProtoMessage() {}
7064
- func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) {
7065
--	return fileDescriptorGenerated, []int{171}
7066
-+	return fileDescriptorGenerated, []int{172}
7067
- }
7068
- 
7069
- func (m *ServiceList) Reset()                    { *m = ServiceList{} }
7070
- func (*ServiceList) ProtoMessage()               {}
7071
--func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} }
7072
-+func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} }
7073
- 
7074
- func (m *ServicePort) Reset()                    { *m = ServicePort{} }
7075
- func (*ServicePort) ProtoMessage()               {}
7076
--func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} }
7077
-+func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} }
7078
- 
7079
- func (m *ServiceProxyOptions) Reset()                    { *m = ServiceProxyOptions{} }
7080
- func (*ServiceProxyOptions) ProtoMessage()               {}
7081
--func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} }
7082
-+func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} }
7083
- 
7084
- func (m *ServiceSpec) Reset()                    { *m = ServiceSpec{} }
7085
- func (*ServiceSpec) ProtoMessage()               {}
7086
--func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} }
7087
-+func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} }
7088
- 
7089
- func (m *ServiceStatus) Reset()                    { *m = ServiceStatus{} }
7090
- func (*ServiceStatus) ProtoMessage()               {}
7091
--func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} }
7092
-+func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} }
7093
- 
7094
- func (m *SessionAffinityConfig) Reset()                    { *m = SessionAffinityConfig{} }
7095
- func (*SessionAffinityConfig) ProtoMessage()               {}
7096
--func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} }
7097
-+func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} }
7098
- 
7099
- func (m *StorageOSPersistentVolumeSource) Reset()      { *m = StorageOSPersistentVolumeSource{} }
7100
- func (*StorageOSPersistentVolumeSource) ProtoMessage() {}
7101
- func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) {
7102
--	return fileDescriptorGenerated, []int{178}
7103
-+	return fileDescriptorGenerated, []int{179}
7104
- }
7105
- 
7106
- func (m *StorageOSVolumeSource) Reset()                    { *m = StorageOSVolumeSource{} }
7107
- func (*StorageOSVolumeSource) ProtoMessage()               {}
7108
--func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} }
7109
-+func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} }
7110
- 
7111
- func (m *Sysctl) Reset()                    { *m = Sysctl{} }
7112
- func (*Sysctl) ProtoMessage()               {}
7113
--func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} }
7114
-+func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} }
7115
- 
7116
- func (m *TCPSocketAction) Reset()                    { *m = TCPSocketAction{} }
7117
- func (*TCPSocketAction) ProtoMessage()               {}
7118
--func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} }
7119
-+func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} }
7120
- 
7121
- func (m *Taint) Reset()                    { *m = Taint{} }
7122
- func (*Taint) ProtoMessage()               {}
7123
--func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} }
7124
-+func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} }
7125
- 
7126
- func (m *Toleration) Reset()                    { *m = Toleration{} }
7127
- func (*Toleration) ProtoMessage()               {}
7128
--func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} }
7129
-+func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} }
7130
- 
7131
- func (m *TopologySelectorLabelRequirement) Reset()      { *m = TopologySelectorLabelRequirement{} }
7132
- func (*TopologySelectorLabelRequirement) ProtoMessage() {}
7133
- func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) {
7134
--	return fileDescriptorGenerated, []int{184}
7135
-+	return fileDescriptorGenerated, []int{185}
7136
- }
7137
- 
7138
- func (m *TopologySelectorTerm) Reset()                    { *m = TopologySelectorTerm{} }
7139
- func (*TopologySelectorTerm) ProtoMessage()               {}
7140
--func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} }
7141
-+func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} }
7142
- 
7143
- func (m *Volume) Reset()                    { *m = Volume{} }
7144
- func (*Volume) ProtoMessage()               {}
7145
--func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} }
7146
-+func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} }
7147
- 
7148
- func (m *VolumeDevice) Reset()                    { *m = VolumeDevice{} }
7149
- func (*VolumeDevice) ProtoMessage()               {}
7150
--func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} }
7151
-+func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} }
7152
- 
7153
- func (m *VolumeMount) Reset()                    { *m = VolumeMount{} }
7154
- func (*VolumeMount) ProtoMessage()               {}
7155
--func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} }
7156
-+func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} }
7157
- 
7158
- func (m *VolumeNodeAffinity) Reset()                    { *m = VolumeNodeAffinity{} }
7159
- func (*VolumeNodeAffinity) ProtoMessage()               {}
7160
--func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} }
7161
-+func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} }
7162
- 
7163
- func (m *VolumeProjection) Reset()                    { *m = VolumeProjection{} }
7164
- func (*VolumeProjection) ProtoMessage()               {}
7165
--func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} }
7166
-+func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} }
7167
- 
7168
- func (m *VolumeSource) Reset()                    { *m = VolumeSource{} }
7169
- func (*VolumeSource) ProtoMessage()               {}
7170
--func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} }
7171
-+func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} }
7172
- 
7173
- func (m *VsphereVirtualDiskVolumeSource) Reset()      { *m = VsphereVirtualDiskVolumeSource{} }
7174
- func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {}
7175
- func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) {
7176
--	return fileDescriptorGenerated, []int{192}
7177
-+	return fileDescriptorGenerated, []int{193}
7178
- }
7179
- 
7180
- func (m *WeightedPodAffinityTerm) Reset()      { *m = WeightedPodAffinityTerm{} }
7181
- func (*WeightedPodAffinityTerm) ProtoMessage() {}
7182
- func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) {
7183
--	return fileDescriptorGenerated, []int{193}
7184
-+	return fileDescriptorGenerated, []int{194}
7185
- }
7186
- 
7187
- func init() {
7188
-@@ -1103,6 +1110,7 @@ func init() {
7189
- 	proto.RegisterType((*Binding)(nil), "k8s.io.api.core.v1.Binding")
7190
- 	proto.RegisterType((*CSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CSIPersistentVolumeSource")
7191
- 	proto.RegisterType((*Capabilities)(nil), "k8s.io.api.core.v1.Capabilities")
7192
-+	proto.RegisterType((*CascadeDiskVolumeSource)(nil), "k8s.io.api.core.v1.CascadeDiskVolumeSource")
7193
- 	proto.RegisterType((*CephFSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CephFSPersistentVolumeSource")
7194
- 	proto.RegisterType((*CephFSVolumeSource)(nil), "k8s.io.api.core.v1.CephFSVolumeSource")
7195
- 	proto.RegisterType((*CinderPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CinderPersistentVolumeSource")
7196
-@@ -1729,6 +1737,32 @@ func (m *Capabilities) MarshalTo(dAtA []byte) (int, error) {
7197
- 	return i, nil
7198
- }
7199
- 
7200
-+func (m *CascadeDiskVolumeSource) Marshal() (dAtA []byte, err error) {
7201
-+	size := m.Size()
7202
-+	dAtA = make([]byte, size)
7203
-+	n, err := m.MarshalTo(dAtA)
7204
-+	if err != nil {
7205
-+		return nil, err
7206
-+	}
7207
-+	return dAtA[:n], nil
7208
-+}
7209
-+
7210
-+func (m *CascadeDiskVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7211
-+	var i int
7212
-+	_ = i
7213
-+	var l int
7214
-+	_ = l
7215
-+	dAtA[i] = 0xa
7216
-+	i++
7217
-+	i = encodeVarintGenerated(dAtA, i, uint64(len(m.DiskID)))
7218
-+	i += copy(dAtA[i:], m.DiskID)
7219
-+	dAtA[i] = 0x12
7220
-+	i++
7221
-+	i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType)))
7222
-+	i += copy(dAtA[i:], m.FSType)
7223
-+	return i, nil
7224
-+}
7225
-+
7226
- func (m *CephFSPersistentVolumeSource) Marshal() (dAtA []byte, err error) {
7227
- 	size := m.Size()
7228
- 	dAtA = make([]byte, size)
7229
-@@ -6404,13 +6438,13 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7230
- 		}
7231
- 		i += n126
7232
- 	}
7233
--	if m.AzureDisk != nil {
7234
-+	if m.CascadeDisk != nil {
7235
- 		dAtA[i] = 0x82
7236
- 		i++
7237
- 		dAtA[i] = 0x1
7238
- 		i++
7239
--		i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size()))
7240
--		n127, err := m.AzureDisk.MarshalTo(dAtA[i:])
7241
-+		i = encodeVarintGenerated(dAtA, i, uint64(m.CascadeDisk.Size()))
7242
-+		n127, err := m.CascadeDisk.MarshalTo(dAtA[i:])
7243
- 		if err != nil {
7244
- 			return 0, err
7245
- 		}
7246
-@@ -6488,6 +6522,18 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7247
- 		}
7248
- 		i += n133
7249
- 	}
7250
-+	if m.AzureDisk != nil {
7251
-+		dAtA[i] = 0xba
7252
-+		i++
7253
-+		dAtA[i] = 0x1
7254
-+		i++
7255
-+		i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size()))
7256
-+		n134, err := m.AzureDisk.MarshalTo(dAtA[i:])
7257
-+		if err != nil {
7258
-+			return 0, err
7259
-+		}
7260
-+		i += n134
7261
-+	}
7262
- 	return i, nil
7263
- }
7264
- 
7265
-@@ -6530,21 +6576,21 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) {
7266
- 			dAtA[i] = 0x12
7267
- 			i++
7268
- 			i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
7269
--			n134, err := (&v).MarshalTo(dAtA[i:])
7270
-+			n135, err := (&v).MarshalTo(dAtA[i:])
7271
- 			if err != nil {
7272
- 				return 0, err
7273
- 			}
7274
--			i += n134
7275
-+			i += n135
7276
- 		}
7277
- 	}
7278
- 	dAtA[i] = 0x12
7279
- 	i++
7280
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeSource.Size()))
7281
--	n135, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:])
7282
-+	n136, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:])
7283
- 	if err != nil {
7284
- 		return 0, err
7285
- 	}
7286
--	i += n135
7287
-+	i += n136
7288
- 	if len(m.AccessModes) > 0 {
7289
- 		for _, s := range m.AccessModes {
7290
- 			dAtA[i] = 0x1a
7291
-@@ -6564,11 +6610,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) {
7292
- 		dAtA[i] = 0x22
7293
- 		i++
7294
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ClaimRef.Size()))
7295
--		n136, err := m.ClaimRef.MarshalTo(dAtA[i:])
7296
-+		n137, err := m.ClaimRef.MarshalTo(dAtA[i:])
7297
- 		if err != nil {
7298
- 			return 0, err
7299
- 		}
7300
--		i += n136
7301
-+		i += n137
7302
- 	}
7303
- 	dAtA[i] = 0x2a
7304
- 	i++
7305
-@@ -6603,11 +6649,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) {
7306
- 		dAtA[i] = 0x4a
7307
- 		i++
7308
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.NodeAffinity.Size()))
7309
--		n137, err := m.NodeAffinity.MarshalTo(dAtA[i:])
7310
-+		n138, err := m.NodeAffinity.MarshalTo(dAtA[i:])
7311
- 		if err != nil {
7312
- 			return 0, err
7313
- 		}
7314
--		i += n137
7315
-+		i += n138
7316
- 	}
7317
- 	return i, nil
7318
- }
7319
-@@ -6686,27 +6732,27 @@ func (m *Pod) MarshalTo(dAtA []byte) (int, error) {
7320
- 	dAtA[i] = 0xa
7321
- 	i++
7322
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7323
--	n138, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7324
-+	n139, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7325
- 	if err != nil {
7326
- 		return 0, err
7327
- 	}
7328
--	i += n138
7329
-+	i += n139
7330
- 	dAtA[i] = 0x12
7331
- 	i++
7332
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
7333
--	n139, err := m.Spec.MarshalTo(dAtA[i:])
7334
-+	n140, err := m.Spec.MarshalTo(dAtA[i:])
7335
- 	if err != nil {
7336
- 		return 0, err
7337
- 	}
7338
--	i += n139
7339
-+	i += n140
7340
- 	dAtA[i] = 0x1a
7341
- 	i++
7342
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
7343
--	n140, err := m.Status.MarshalTo(dAtA[i:])
7344
-+	n141, err := m.Status.MarshalTo(dAtA[i:])
7345
- 	if err != nil {
7346
- 		return 0, err
7347
- 	}
7348
--	i += n140
7349
-+	i += n141
7350
- 	return i, nil
7351
- }
7352
- 
7353
-@@ -6771,11 +6817,11 @@ func (m *PodAffinityTerm) MarshalTo(dAtA []byte) (int, error) {
7354
- 		dAtA[i] = 0xa
7355
- 		i++
7356
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.LabelSelector.Size()))
7357
--		n141, err := m.LabelSelector.MarshalTo(dAtA[i:])
7358
-+		n142, err := m.LabelSelector.MarshalTo(dAtA[i:])
7359
- 		if err != nil {
7360
- 			return 0, err
7361
- 		}
7362
--		i += n141
7363
-+		i += n142
7364
- 	}
7365
- 	if len(m.Namespaces) > 0 {
7366
- 		for _, s := range m.Namespaces {
7367
-@@ -6921,19 +6967,19 @@ func (m *PodCondition) MarshalTo(dAtA []byte) (int, error) {
7368
- 	dAtA[i] = 0x1a
7369
- 	i++
7370
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size()))
7371
--	n142, err := m.LastProbeTime.MarshalTo(dAtA[i:])
7372
-+	n143, err := m.LastProbeTime.MarshalTo(dAtA[i:])
7373
- 	if err != nil {
7374
- 		return 0, err
7375
- 	}
7376
--	i += n142
7377
-+	i += n143
7378
- 	dAtA[i] = 0x22
7379
- 	i++
7380
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size()))
7381
--	n143, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
7382
-+	n144, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
7383
- 	if err != nil {
7384
- 		return 0, err
7385
- 	}
7386
--	i += n143
7387
-+	i += n144
7388
- 	dAtA[i] = 0x2a
7389
- 	i++
7390
- 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
7391
-@@ -7120,11 +7166,11 @@ func (m *PodList) MarshalTo(dAtA []byte) (int, error) {
7392
- 	dAtA[i] = 0xa
7393
- 	i++
7394
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
7395
--	n144, err := m.ListMeta.MarshalTo(dAtA[i:])
7396
-+	n145, err := m.ListMeta.MarshalTo(dAtA[i:])
7397
- 	if err != nil {
7398
- 		return 0, err
7399
- 	}
7400
--	i += n144
7401
-+	i += n145
7402
- 	if len(m.Items) > 0 {
7403
- 		for _, msg := range m.Items {
7404
- 			dAtA[i] = 0x12
7405
-@@ -7184,11 +7230,11 @@ func (m *PodLogOptions) MarshalTo(dAtA []byte) (int, error) {
7406
- 		dAtA[i] = 0x2a
7407
- 		i++
7408
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SinceTime.Size()))
7409
--		n145, err := m.SinceTime.MarshalTo(dAtA[i:])
7410
-+		n146, err := m.SinceTime.MarshalTo(dAtA[i:])
7411
- 		if err != nil {
7412
- 			return 0, err
7413
- 		}
7414
--		i += n145
7415
-+		i += n146
7416
- 	}
7417
- 	dAtA[i] = 0x30
7418
- 	i++
7419
-@@ -7299,11 +7345,11 @@ func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) {
7420
- 		dAtA[i] = 0xa
7421
- 		i++
7422
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size()))
7423
--		n146, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
7424
-+		n147, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
7425
- 		if err != nil {
7426
- 			return 0, err
7427
- 		}
7428
--		i += n146
7429
-+		i += n147
7430
- 	}
7431
- 	if m.RunAsUser != nil {
7432
- 		dAtA[i] = 0x10
7433
-@@ -7371,11 +7417,11 @@ func (m *PodSignature) MarshalTo(dAtA []byte) (int, error) {
7434
- 		dAtA[i] = 0xa
7435
- 		i++
7436
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.PodController.Size()))
7437
--		n147, err := m.PodController.MarshalTo(dAtA[i:])
7438
-+		n148, err := m.PodController.MarshalTo(dAtA[i:])
7439
- 		if err != nil {
7440
- 			return 0, err
7441
- 		}
7442
--		i += n147
7443
-+		i += n148
7444
- 	}
7445
- 	return i, nil
7446
- }
7447
-@@ -7499,11 +7545,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) {
7448
- 		dAtA[i] = 0x72
7449
- 		i++
7450
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size()))
7451
--		n148, err := m.SecurityContext.MarshalTo(dAtA[i:])
7452
-+		n149, err := m.SecurityContext.MarshalTo(dAtA[i:])
7453
- 		if err != nil {
7454
- 			return 0, err
7455
- 		}
7456
--		i += n148
7457
-+		i += n149
7458
- 	}
7459
- 	if len(m.ImagePullSecrets) > 0 {
7460
- 		for _, msg := range m.ImagePullSecrets {
7461
-@@ -7535,11 +7581,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) {
7462
- 		dAtA[i] = 0x1
7463
- 		i++
7464
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Affinity.Size()))
7465
--		n149, err := m.Affinity.MarshalTo(dAtA[i:])
7466
-+		n150, err := m.Affinity.MarshalTo(dAtA[i:])
7467
- 		if err != nil {
7468
- 			return 0, err
7469
- 		}
7470
--		i += n149
7471
-+		i += n150
7472
- 	}
7473
- 	dAtA[i] = 0x9a
7474
- 	i++
7475
-@@ -7620,11 +7666,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) {
7476
- 		dAtA[i] = 0x1
7477
- 		i++
7478
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.DNSConfig.Size()))
7479
--		n150, err := m.DNSConfig.MarshalTo(dAtA[i:])
7480
-+		n151, err := m.DNSConfig.MarshalTo(dAtA[i:])
7481
- 		if err != nil {
7482
- 			return 0, err
7483
- 		}
7484
--		i += n150
7485
-+		i += n151
7486
- 	}
7487
- 	if m.ShareProcessNamespace != nil {
7488
- 		dAtA[i] = 0xd8
7489
-@@ -7706,11 +7752,11 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) {
7490
- 		dAtA[i] = 0x3a
7491
- 		i++
7492
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size()))
7493
--		n151, err := m.StartTime.MarshalTo(dAtA[i:])
7494
-+		n152, err := m.StartTime.MarshalTo(dAtA[i:])
7495
- 		if err != nil {
7496
- 			return 0, err
7497
- 		}
7498
--		i += n151
7499
-+		i += n152
7500
- 	}
7501
- 	if len(m.ContainerStatuses) > 0 {
7502
- 		for _, msg := range m.ContainerStatuses {
7503
-@@ -7765,19 +7811,19 @@ func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) {
7504
- 	dAtA[i] = 0xa
7505
- 	i++
7506
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7507
--	n152, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7508
-+	n153, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7509
- 	if err != nil {
7510
- 		return 0, err
7511
- 	}
7512
--	i += n152
7513
-+	i += n153
7514
- 	dAtA[i] = 0x12
7515
- 	i++
7516
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
7517
--	n153, err := m.Status.MarshalTo(dAtA[i:])
7518
-+	n154, err := m.Status.MarshalTo(dAtA[i:])
7519
- 	if err != nil {
7520
- 		return 0, err
7521
- 	}
7522
--	i += n153
7523
-+	i += n154
7524
- 	return i, nil
7525
- }
7526
- 
7527
-@@ -7799,19 +7845,19 @@ func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) {
7528
- 	dAtA[i] = 0xa
7529
- 	i++
7530
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7531
--	n154, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7532
-+	n155, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7533
- 	if err != nil {
7534
- 		return 0, err
7535
- 	}
7536
--	i += n154
7537
-+	i += n155
7538
- 	dAtA[i] = 0x12
7539
- 	i++
7540
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size()))
7541
--	n155, err := m.Template.MarshalTo(dAtA[i:])
7542
-+	n156, err := m.Template.MarshalTo(dAtA[i:])
7543
- 	if err != nil {
7544
- 		return 0, err
7545
- 	}
7546
--	i += n155
7547
-+	i += n156
7548
- 	return i, nil
7549
- }
7550
- 
7551
-@@ -7833,11 +7879,11 @@ func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) {
7552
- 	dAtA[i] = 0xa
7553
- 	i++
7554
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
7555
--	n156, err := m.ListMeta.MarshalTo(dAtA[i:])
7556
-+	n157, err := m.ListMeta.MarshalTo(dAtA[i:])
7557
- 	if err != nil {
7558
- 		return 0, err
7559
- 	}
7560
--	i += n156
7561
-+	i += n157
7562
- 	if len(m.Items) > 0 {
7563
- 		for _, msg := range m.Items {
7564
- 			dAtA[i] = 0x12
7565
-@@ -7871,19 +7917,19 @@ func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) {
7566
- 	dAtA[i] = 0xa
7567
- 	i++
7568
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7569
--	n157, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7570
-+	n158, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7571
- 	if err != nil {
7572
- 		return 0, err
7573
- 	}
7574
--	i += n157
7575
-+	i += n158
7576
- 	dAtA[i] = 0x12
7577
- 	i++
7578
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
7579
--	n158, err := m.Spec.MarshalTo(dAtA[i:])
7580
-+	n159, err := m.Spec.MarshalTo(dAtA[i:])
7581
- 	if err != nil {
7582
- 		return 0, err
7583
- 	}
7584
--	i += n158
7585
-+	i += n159
7586
- 	return i, nil
7587
- }
7588
- 
7589
-@@ -7963,19 +8009,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) {
7590
- 	dAtA[i] = 0xa
7591
- 	i++
7592
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.PodSignature.Size()))
7593
--	n159, err := m.PodSignature.MarshalTo(dAtA[i:])
7594
-+	n160, err := m.PodSignature.MarshalTo(dAtA[i:])
7595
- 	if err != nil {
7596
- 		return 0, err
7597
- 	}
7598
--	i += n159
7599
-+	i += n160
7600
- 	dAtA[i] = 0x12
7601
- 	i++
7602
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size()))
7603
--	n160, err := m.EvictionTime.MarshalTo(dAtA[i:])
7604
-+	n161, err := m.EvictionTime.MarshalTo(dAtA[i:])
7605
- 	if err != nil {
7606
- 		return 0, err
7607
- 	}
7608
--	i += n160
7609
-+	i += n161
7610
- 	dAtA[i] = 0x1a
7611
- 	i++
7612
- 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
7613
-@@ -8008,11 +8054,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) {
7614
- 	dAtA[i] = 0x12
7615
- 	i++
7616
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Preference.Size()))
7617
--	n161, err := m.Preference.MarshalTo(dAtA[i:])
7618
-+	n162, err := m.Preference.MarshalTo(dAtA[i:])
7619
- 	if err != nil {
7620
- 		return 0, err
7621
- 	}
7622
--	i += n161
7623
-+	i += n162
7624
- 	return i, nil
7625
- }
7626
- 
7627
-@@ -8034,11 +8080,11 @@ func (m *Probe) MarshalTo(dAtA []byte) (int, error) {
7628
- 	dAtA[i] = 0xa
7629
- 	i++
7630
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Handler.Size()))
7631
--	n162, err := m.Handler.MarshalTo(dAtA[i:])
7632
-+	n163, err := m.Handler.MarshalTo(dAtA[i:])
7633
- 	if err != nil {
7634
- 		return 0, err
7635
- 	}
7636
--	i += n162
7637
-+	i += n163
7638
- 	dAtA[i] = 0x10
7639
- 	i++
7640
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds))
7641
-@@ -8188,11 +8234,11 @@ func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7642
- 		dAtA[i] = 0x3a
7643
- 		i++
7644
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
7645
--		n163, err := m.SecretRef.MarshalTo(dAtA[i:])
7646
-+		n164, err := m.SecretRef.MarshalTo(dAtA[i:])
7647
- 		if err != nil {
7648
- 			return 0, err
7649
- 		}
7650
--		i += n163
7651
-+		i += n164
7652
- 	}
7653
- 	dAtA[i] = 0x40
7654
- 	i++
7655
-@@ -8259,11 +8305,11 @@ func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7656
- 		dAtA[i] = 0x3a
7657
- 		i++
7658
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
7659
--		n164, err := m.SecretRef.MarshalTo(dAtA[i:])
7660
-+		n165, err := m.SecretRef.MarshalTo(dAtA[i:])
7661
- 		if err != nil {
7662
- 			return 0, err
7663
- 		}
7664
--		i += n164
7665
-+		i += n165
7666
- 	}
7667
- 	dAtA[i] = 0x40
7668
- 	i++
7669
-@@ -8294,11 +8340,11 @@ func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) {
7670
- 	dAtA[i] = 0xa
7671
- 	i++
7672
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7673
--	n165, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7674
-+	n166, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7675
- 	if err != nil {
7676
- 		return 0, err
7677
- 	}
7678
--	i += n165
7679
-+	i += n166
7680
- 	dAtA[i] = 0x12
7681
- 	i++
7682
- 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range)))
7683
-@@ -8330,27 +8376,27 @@ func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) {
7684
- 	dAtA[i] = 0xa
7685
- 	i++
7686
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7687
--	n166, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7688
-+	n167, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7689
- 	if err != nil {
7690
- 		return 0, err
7691
- 	}
7692
--	i += n166
7693
-+	i += n167
7694
- 	dAtA[i] = 0x12
7695
- 	i++
7696
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
7697
--	n167, err := m.Spec.MarshalTo(dAtA[i:])
7698
-+	n168, err := m.Spec.MarshalTo(dAtA[i:])
7699
- 	if err != nil {
7700
- 		return 0, err
7701
- 	}
7702
--	i += n167
7703
-+	i += n168
7704
- 	dAtA[i] = 0x1a
7705
- 	i++
7706
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
7707
--	n168, err := m.Status.MarshalTo(dAtA[i:])
7708
-+	n169, err := m.Status.MarshalTo(dAtA[i:])
7709
- 	if err != nil {
7710
- 		return 0, err
7711
- 	}
7712
--	i += n168
7713
-+	i += n169
7714
- 	return i, nil
7715
- }
7716
- 
7717
-@@ -8380,11 +8426,11 @@ func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) {
7718
- 	dAtA[i] = 0x1a
7719
- 	i++
7720
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size()))
7721
--	n169, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
7722
-+	n170, err := m.LastTransitionTime.MarshalTo(dAtA[i:])
7723
- 	if err != nil {
7724
- 		return 0, err
7725
- 	}
7726
--	i += n169
7727
-+	i += n170
7728
- 	dAtA[i] = 0x22
7729
- 	i++
7730
- 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason)))
7731
-@@ -8414,11 +8460,11 @@ func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) {
7732
- 	dAtA[i] = 0xa
7733
- 	i++
7734
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
7735
--	n170, err := m.ListMeta.MarshalTo(dAtA[i:])
7736
-+	n171, err := m.ListMeta.MarshalTo(dAtA[i:])
7737
- 	if err != nil {
7738
- 		return 0, err
7739
- 	}
7740
--	i += n170
7741
-+	i += n171
7742
- 	if len(m.Items) > 0 {
7743
- 		for _, msg := range m.Items {
7744
- 			dAtA[i] = 0x12
7745
-@@ -8480,11 +8526,11 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) {
7746
- 		dAtA[i] = 0x1a
7747
- 		i++
7748
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size()))
7749
--		n171, err := m.Template.MarshalTo(dAtA[i:])
7750
-+		n172, err := m.Template.MarshalTo(dAtA[i:])
7751
- 		if err != nil {
7752
- 			return 0, err
7753
- 		}
7754
--		i += n171
7755
-+		i += n172
7756
- 	}
7757
- 	dAtA[i] = 0x20
7758
- 	i++
7759
-@@ -8563,11 +8609,11 @@ func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) {
7760
- 	dAtA[i] = 0x1a
7761
- 	i++
7762
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size()))
7763
--	n172, err := m.Divisor.MarshalTo(dAtA[i:])
7764
-+	n173, err := m.Divisor.MarshalTo(dAtA[i:])
7765
- 	if err != nil {
7766
- 		return 0, err
7767
- 	}
7768
--	i += n172
7769
-+	i += n173
7770
- 	return i, nil
7771
- }
7772
- 
7773
-@@ -8589,27 +8635,27 @@ func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) {
7774
- 	dAtA[i] = 0xa
7775
- 	i++
7776
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7777
--	n173, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7778
-+	n174, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7779
- 	if err != nil {
7780
- 		return 0, err
7781
- 	}
7782
--	i += n173
7783
-+	i += n174
7784
- 	dAtA[i] = 0x12
7785
- 	i++
7786
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
7787
--	n174, err := m.Spec.MarshalTo(dAtA[i:])
7788
-+	n175, err := m.Spec.MarshalTo(dAtA[i:])
7789
- 	if err != nil {
7790
- 		return 0, err
7791
- 	}
7792
--	i += n174
7793
-+	i += n175
7794
- 	dAtA[i] = 0x1a
7795
- 	i++
7796
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
7797
--	n175, err := m.Status.MarshalTo(dAtA[i:])
7798
-+	n176, err := m.Status.MarshalTo(dAtA[i:])
7799
- 	if err != nil {
7800
- 		return 0, err
7801
- 	}
7802
--	i += n175
7803
-+	i += n176
7804
- 	return i, nil
7805
- }
7806
- 
7807
-@@ -8631,11 +8677,11 @@ func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) {
7808
- 	dAtA[i] = 0xa
7809
- 	i++
7810
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
7811
--	n176, err := m.ListMeta.MarshalTo(dAtA[i:])
7812
-+	n177, err := m.ListMeta.MarshalTo(dAtA[i:])
7813
- 	if err != nil {
7814
- 		return 0, err
7815
- 	}
7816
--	i += n176
7817
-+	i += n177
7818
- 	if len(m.Items) > 0 {
7819
- 		for _, msg := range m.Items {
7820
- 			dAtA[i] = 0x12
7821
-@@ -8690,11 +8736,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) {
7822
- 			dAtA[i] = 0x12
7823
- 			i++
7824
- 			i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
7825
--			n177, err := (&v).MarshalTo(dAtA[i:])
7826
-+			n178, err := (&v).MarshalTo(dAtA[i:])
7827
- 			if err != nil {
7828
- 				return 0, err
7829
- 			}
7830
--			i += n177
7831
-+			i += n178
7832
- 		}
7833
- 	}
7834
- 	if len(m.Scopes) > 0 {
7835
-@@ -8716,11 +8762,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) {
7836
- 		dAtA[i] = 0x1a
7837
- 		i++
7838
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ScopeSelector.Size()))
7839
--		n178, err := m.ScopeSelector.MarshalTo(dAtA[i:])
7840
-+		n179, err := m.ScopeSelector.MarshalTo(dAtA[i:])
7841
- 		if err != nil {
7842
- 			return 0, err
7843
- 		}
7844
--		i += n178
7845
-+		i += n179
7846
- 	}
7847
- 	return i, nil
7848
- }
7849
-@@ -8764,11 +8810,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) {
7850
- 			dAtA[i] = 0x12
7851
- 			i++
7852
- 			i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
7853
--			n179, err := (&v).MarshalTo(dAtA[i:])
7854
-+			n180, err := (&v).MarshalTo(dAtA[i:])
7855
- 			if err != nil {
7856
- 				return 0, err
7857
- 			}
7858
--			i += n179
7859
-+			i += n180
7860
- 		}
7861
- 	}
7862
- 	if len(m.Used) > 0 {
7863
-@@ -8795,11 +8841,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) {
7864
- 			dAtA[i] = 0x12
7865
- 			i++
7866
- 			i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
7867
--			n180, err := (&v).MarshalTo(dAtA[i:])
7868
-+			n181, err := (&v).MarshalTo(dAtA[i:])
7869
- 			if err != nil {
7870
- 				return 0, err
7871
- 			}
7872
--			i += n180
7873
-+			i += n181
7874
- 		}
7875
- 	}
7876
- 	return i, nil
7877
-@@ -8844,11 +8890,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) {
7878
- 			dAtA[i] = 0x12
7879
- 			i++
7880
- 			i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
7881
--			n181, err := (&v).MarshalTo(dAtA[i:])
7882
-+			n182, err := (&v).MarshalTo(dAtA[i:])
7883
- 			if err != nil {
7884
- 				return 0, err
7885
- 			}
7886
--			i += n181
7887
-+			i += n182
7888
- 		}
7889
- 	}
7890
- 	if len(m.Requests) > 0 {
7891
-@@ -8875,11 +8921,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) {
7892
- 			dAtA[i] = 0x12
7893
- 			i++
7894
- 			i = encodeVarintGenerated(dAtA, i, uint64((&v).Size()))
7895
--			n182, err := (&v).MarshalTo(dAtA[i:])
7896
-+			n183, err := (&v).MarshalTo(dAtA[i:])
7897
- 			if err != nil {
7898
- 				return 0, err
7899
- 			}
7900
--			i += n182
7901
-+			i += n183
7902
- 		}
7903
- 	}
7904
- 	return i, nil
7905
-@@ -8946,11 +8992,11 @@ func (m *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7906
- 		dAtA[i] = 0x1a
7907
- 		i++
7908
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
7909
--		n183, err := m.SecretRef.MarshalTo(dAtA[i:])
7910
-+		n184, err := m.SecretRef.MarshalTo(dAtA[i:])
7911
- 		if err != nil {
7912
- 			return 0, err
7913
- 		}
7914
--		i += n183
7915
-+		i += n184
7916
- 	}
7917
- 	dAtA[i] = 0x20
7918
- 	i++
7919
-@@ -9018,11 +9064,11 @@ func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) {
7920
- 		dAtA[i] = 0x1a
7921
- 		i++
7922
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
7923
--		n184, err := m.SecretRef.MarshalTo(dAtA[i:])
7924
-+		n185, err := m.SecretRef.MarshalTo(dAtA[i:])
7925
- 		if err != nil {
7926
- 			return 0, err
7927
- 		}
7928
--		i += n184
7929
-+		i += n185
7930
- 	}
7931
- 	dAtA[i] = 0x20
7932
- 	i++
7933
-@@ -9152,11 +9198,11 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) {
7934
- 	dAtA[i] = 0xa
7935
- 	i++
7936
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
7937
--	n185, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7938
-+	n186, err := m.ObjectMeta.MarshalTo(dAtA[i:])
7939
- 	if err != nil {
7940
- 		return 0, err
7941
- 	}
7942
--	i += n185
7943
-+	i += n186
7944
- 	if len(m.Data) > 0 {
7945
- 		keysForData := make([]string, 0, len(m.Data))
7946
- 		for k := range m.Data {
7947
-@@ -9232,11 +9278,11 @@ func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) {
7948
- 	dAtA[i] = 0xa
7949
- 	i++
7950
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size()))
7951
--	n186, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
7952
-+	n187, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
7953
- 	if err != nil {
7954
- 		return 0, err
7955
- 	}
7956
--	i += n186
7957
-+	i += n187
7958
- 	if m.Optional != nil {
7959
- 		dAtA[i] = 0x10
7960
- 		i++
7961
-@@ -9268,11 +9314,11 @@ func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) {
7962
- 	dAtA[i] = 0xa
7963
- 	i++
7964
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size()))
7965
--	n187, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
7966
-+	n188, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
7967
- 	if err != nil {
7968
- 		return 0, err
7969
- 	}
7970
--	i += n187
7971
-+	i += n188
7972
- 	dAtA[i] = 0x12
7973
- 	i++
7974
- 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key)))
7975
-@@ -9308,11 +9354,11 @@ func (m *SecretList) MarshalTo(dAtA []byte) (int, error) {
7976
- 	dAtA[i] = 0xa
7977
- 	i++
7978
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
7979
--	n188, err := m.ListMeta.MarshalTo(dAtA[i:])
7980
-+	n189, err := m.ListMeta.MarshalTo(dAtA[i:])
7981
- 	if err != nil {
7982
- 		return 0, err
7983
- 	}
7984
--	i += n188
7985
-+	i += n189
7986
- 	if len(m.Items) > 0 {
7987
- 		for _, msg := range m.Items {
7988
- 			dAtA[i] = 0x12
7989
-@@ -9346,11 +9392,11 @@ func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) {
7990
- 	dAtA[i] = 0xa
7991
- 	i++
7992
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size()))
7993
--	n189, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
7994
-+	n190, err := m.LocalObjectReference.MarshalTo(dAtA[i:])
7995
- 	if err != nil {
7996
- 		return 0, err
7997
- 	}
7998
--	i += n189
7999
-+	i += n190
8000
- 	if len(m.Items) > 0 {
8001
- 		for _, msg := range m.Items {
8002
- 			dAtA[i] = 0x12
8003
-@@ -9470,11 +9516,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) {
8004
- 		dAtA[i] = 0xa
8005
- 		i++
8006
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size()))
8007
--		n190, err := m.Capabilities.MarshalTo(dAtA[i:])
8008
-+		n191, err := m.Capabilities.MarshalTo(dAtA[i:])
8009
- 		if err != nil {
8010
- 			return 0, err
8011
- 		}
8012
--		i += n190
8013
-+		i += n191
8014
- 	}
8015
- 	if m.Privileged != nil {
8016
- 		dAtA[i] = 0x10
8017
-@@ -9490,11 +9536,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) {
8018
- 		dAtA[i] = 0x1a
8019
- 		i++
8020
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size()))
8021
--		n191, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
8022
-+		n192, err := m.SELinuxOptions.MarshalTo(dAtA[i:])
8023
- 		if err != nil {
8024
- 			return 0, err
8025
- 		}
8026
--		i += n191
8027
-+		i += n192
8028
- 	}
8029
- 	if m.RunAsUser != nil {
8030
- 		dAtA[i] = 0x20
8031
-@@ -9557,11 +9603,11 @@ func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) {
8032
- 	dAtA[i] = 0xa
8033
- 	i++
8034
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size()))
8035
--	n192, err := m.Reference.MarshalTo(dAtA[i:])
8036
-+	n193, err := m.Reference.MarshalTo(dAtA[i:])
8037
- 	if err != nil {
8038
- 		return 0, err
8039
- 	}
8040
--	i += n192
8041
-+	i += n193
8042
- 	return i, nil
8043
- }
8044
- 
8045
-@@ -9583,27 +9629,27 @@ func (m *Service) MarshalTo(dAtA []byte) (int, error) {
8046
- 	dAtA[i] = 0xa
8047
- 	i++
8048
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
8049
--	n193, err := m.ObjectMeta.MarshalTo(dAtA[i:])
8050
-+	n194, err := m.ObjectMeta.MarshalTo(dAtA[i:])
8051
- 	if err != nil {
8052
- 		return 0, err
8053
- 	}
8054
--	i += n193
8055
-+	i += n194
8056
- 	dAtA[i] = 0x12
8057
- 	i++
8058
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size()))
8059
--	n194, err := m.Spec.MarshalTo(dAtA[i:])
8060
-+	n195, err := m.Spec.MarshalTo(dAtA[i:])
8061
- 	if err != nil {
8062
- 		return 0, err
8063
- 	}
8064
--	i += n194
8065
-+	i += n195
8066
- 	dAtA[i] = 0x1a
8067
- 	i++
8068
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size()))
8069
--	n195, err := m.Status.MarshalTo(dAtA[i:])
8070
-+	n196, err := m.Status.MarshalTo(dAtA[i:])
8071
- 	if err != nil {
8072
- 		return 0, err
8073
- 	}
8074
--	i += n195
8075
-+	i += n196
8076
- 	return i, nil
8077
- }
8078
- 
8079
-@@ -9625,11 +9671,11 @@ func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) {
8080
- 	dAtA[i] = 0xa
8081
- 	i++
8082
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size()))
8083
--	n196, err := m.ObjectMeta.MarshalTo(dAtA[i:])
8084
-+	n197, err := m.ObjectMeta.MarshalTo(dAtA[i:])
8085
- 	if err != nil {
8086
- 		return 0, err
8087
- 	}
8088
--	i += n196
8089
-+	i += n197
8090
- 	if len(m.Secrets) > 0 {
8091
- 		for _, msg := range m.Secrets {
8092
- 			dAtA[i] = 0x12
8093
-@@ -9685,11 +9731,11 @@ func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) {
8094
- 	dAtA[i] = 0xa
8095
- 	i++
8096
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
8097
--	n197, err := m.ListMeta.MarshalTo(dAtA[i:])
8098
-+	n198, err := m.ListMeta.MarshalTo(dAtA[i:])
8099
- 	if err != nil {
8100
- 		return 0, err
8101
- 	}
8102
--	i += n197
8103
-+	i += n198
8104
- 	if len(m.Items) > 0 {
8105
- 		for _, msg := range m.Items {
8106
- 			dAtA[i] = 0x12
8107
-@@ -9754,11 +9800,11 @@ func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) {
8108
- 	dAtA[i] = 0xa
8109
- 	i++
8110
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size()))
8111
--	n198, err := m.ListMeta.MarshalTo(dAtA[i:])
8112
-+	n199, err := m.ListMeta.MarshalTo(dAtA[i:])
8113
- 	if err != nil {
8114
- 		return 0, err
8115
- 	}
8116
--	i += n198
8117
-+	i += n199
8118
- 	if len(m.Items) > 0 {
8119
- 		for _, msg := range m.Items {
8120
- 			dAtA[i] = 0x12
8121
-@@ -9803,11 +9849,11 @@ func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) {
8122
- 	dAtA[i] = 0x22
8123
- 	i++
8124
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size()))
8125
--	n199, err := m.TargetPort.MarshalTo(dAtA[i:])
8126
-+	n200, err := m.TargetPort.MarshalTo(dAtA[i:])
8127
- 	if err != nil {
8128
- 		return 0, err
8129
- 	}
8130
--	i += n199
8131
-+	i += n200
8132
- 	dAtA[i] = 0x28
8133
- 	i++
8134
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort))
8135
-@@ -9954,11 +10000,11 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) {
8136
- 		dAtA[i] = 0x72
8137
- 		i++
8138
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size()))
8139
--		n200, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:])
8140
-+		n201, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:])
8141
- 		if err != nil {
8142
- 			return 0, err
8143
- 		}
8144
--		i += n200
8145
-+		i += n201
8146
- 	}
8147
- 	return i, nil
8148
- }
8149
-@@ -9981,11 +10027,11 @@ func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) {
8150
- 	dAtA[i] = 0xa
8151
- 	i++
8152
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size()))
8153
--	n201, err := m.LoadBalancer.MarshalTo(dAtA[i:])
8154
-+	n202, err := m.LoadBalancer.MarshalTo(dAtA[i:])
8155
- 	if err != nil {
8156
- 		return 0, err
8157
- 	}
8158
--	i += n201
8159
-+	i += n202
8160
- 	return i, nil
8161
- }
8162
- 
8163
-@@ -10008,11 +10054,11 @@ func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) {
8164
- 		dAtA[i] = 0xa
8165
- 		i++
8166
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size()))
8167
--		n202, err := m.ClientIP.MarshalTo(dAtA[i:])
8168
-+		n203, err := m.ClientIP.MarshalTo(dAtA[i:])
8169
- 		if err != nil {
8170
- 			return 0, err
8171
- 		}
8172
--		i += n202
8173
-+		i += n203
8174
- 	}
8175
- 	return i, nil
8176
- }
8177
-@@ -10056,11 +10102,11 @@ func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
8178
- 		dAtA[i] = 0x2a
8179
- 		i++
8180
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
8181
--		n203, err := m.SecretRef.MarshalTo(dAtA[i:])
8182
-+		n204, err := m.SecretRef.MarshalTo(dAtA[i:])
8183
- 		if err != nil {
8184
- 			return 0, err
8185
- 		}
8186
--		i += n203
8187
-+		i += n204
8188
- 	}
8189
- 	return i, nil
8190
- }
8191
-@@ -10104,11 +10150,11 @@ func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) {
8192
- 		dAtA[i] = 0x2a
8193
- 		i++
8194
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size()))
8195
--		n204, err := m.SecretRef.MarshalTo(dAtA[i:])
8196
-+		n205, err := m.SecretRef.MarshalTo(dAtA[i:])
8197
- 		if err != nil {
8198
- 			return 0, err
8199
- 		}
8200
--		i += n204
8201
-+		i += n205
8202
- 	}
8203
- 	return i, nil
8204
- }
8205
-@@ -10157,11 +10203,11 @@ func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) {
8206
- 	dAtA[i] = 0xa
8207
- 	i++
8208
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size()))
8209
--	n205, err := m.Port.MarshalTo(dAtA[i:])
8210
-+	n206, err := m.Port.MarshalTo(dAtA[i:])
8211
- 	if err != nil {
8212
- 		return 0, err
8213
- 	}
8214
--	i += n205
8215
-+	i += n206
8216
- 	dAtA[i] = 0x12
8217
- 	i++
8218
- 	i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host)))
8219
-@@ -10200,11 +10246,11 @@ func (m *Taint) MarshalTo(dAtA []byte) (int, error) {
8220
- 		dAtA[i] = 0x22
8221
- 		i++
8222
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size()))
8223
--		n206, err := m.TimeAdded.MarshalTo(dAtA[i:])
8224
-+		n207, err := m.TimeAdded.MarshalTo(dAtA[i:])
8225
- 		if err != nil {
8226
- 			return 0, err
8227
- 		}
8228
--		i += n206
8229
-+		i += n207
8230
- 	}
8231
- 	return i, nil
8232
- }
8233
-@@ -10337,11 +10383,11 @@ func (m *Volume) MarshalTo(dAtA []byte) (int, error) {
8234
- 	dAtA[i] = 0x12
8235
- 	i++
8236
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size()))
8237
--	n207, err := m.VolumeSource.MarshalTo(dAtA[i:])
8238
-+	n208, err := m.VolumeSource.MarshalTo(dAtA[i:])
8239
- 	if err != nil {
8240
- 		return 0, err
8241
- 	}
8242
--	i += n207
8243
-+	i += n208
8244
- 	return i, nil
8245
- }
8246
- 
8247
-@@ -10434,11 +10480,11 @@ func (m *VolumeNodeAffinity) MarshalTo(dAtA []byte) (int, error) {
8248
- 		dAtA[i] = 0xa
8249
- 		i++
8250
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Required.Size()))
8251
--		n208, err := m.Required.MarshalTo(dAtA[i:])
8252
-+		n209, err := m.Required.MarshalTo(dAtA[i:])
8253
- 		if err != nil {
8254
- 			return 0, err
8255
- 		}
8256
--		i += n208
8257
-+		i += n209
8258
- 	}
8259
- 	return i, nil
8260
- }
8261
-@@ -10462,41 +10508,41 @@ func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) {
8262
- 		dAtA[i] = 0xa
8263
- 		i++
8264
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size()))
8265
--		n209, err := m.Secret.MarshalTo(dAtA[i:])
8266
-+		n210, err := m.Secret.MarshalTo(dAtA[i:])
8267
- 		if err != nil {
8268
- 			return 0, err
8269
- 		}
8270
--		i += n209
8271
-+		i += n210
8272
- 	}
8273
- 	if m.DownwardAPI != nil {
8274
- 		dAtA[i] = 0x12
8275
- 		i++
8276
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size()))
8277
--		n210, err := m.DownwardAPI.MarshalTo(dAtA[i:])
8278
-+		n211, err := m.DownwardAPI.MarshalTo(dAtA[i:])
8279
- 		if err != nil {
8280
- 			return 0, err
8281
- 		}
8282
--		i += n210
8283
-+		i += n211
8284
- 	}
8285
- 	if m.ConfigMap != nil {
8286
- 		dAtA[i] = 0x1a
8287
- 		i++
8288
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size()))
8289
--		n211, err := m.ConfigMap.MarshalTo(dAtA[i:])
8290
-+		n212, err := m.ConfigMap.MarshalTo(dAtA[i:])
8291
- 		if err != nil {
8292
- 			return 0, err
8293
- 		}
8294
--		i += n211
8295
-+		i += n212
8296
- 	}
8297
- 	if m.ServiceAccountToken != nil {
8298
- 		dAtA[i] = 0x22
8299
- 		i++
8300
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ServiceAccountToken.Size()))
8301
--		n212, err := m.ServiceAccountToken.MarshalTo(dAtA[i:])
8302
-+		n213, err := m.ServiceAccountToken.MarshalTo(dAtA[i:])
8303
- 		if err != nil {
8304
- 			return 0, err
8305
- 		}
8306
--		i += n212
8307
-+		i += n213
8308
- 	}
8309
- 	return i, nil
8310
- }
8311
-@@ -10520,151 +10566,151 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8312
- 		dAtA[i] = 0xa
8313
- 		i++
8314
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size()))
8315
--		n213, err := m.HostPath.MarshalTo(dAtA[i:])
8316
-+		n214, err := m.HostPath.MarshalTo(dAtA[i:])
8317
- 		if err != nil {
8318
- 			return 0, err
8319
- 		}
8320
--		i += n213
8321
-+		i += n214
8322
- 	}
8323
- 	if m.EmptyDir != nil {
8324
- 		dAtA[i] = 0x12
8325
- 		i++
8326
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size()))
8327
--		n214, err := m.EmptyDir.MarshalTo(dAtA[i:])
8328
-+		n215, err := m.EmptyDir.MarshalTo(dAtA[i:])
8329
- 		if err != nil {
8330
- 			return 0, err
8331
- 		}
8332
--		i += n214
8333
-+		i += n215
8334
- 	}
8335
- 	if m.GCEPersistentDisk != nil {
8336
- 		dAtA[i] = 0x1a
8337
- 		i++
8338
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size()))
8339
--		n215, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:])
8340
-+		n216, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:])
8341
- 		if err != nil {
8342
- 			return 0, err
8343
- 		}
8344
--		i += n215
8345
-+		i += n216
8346
- 	}
8347
- 	if m.AWSElasticBlockStore != nil {
8348
- 		dAtA[i] = 0x22
8349
- 		i++
8350
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size()))
8351
--		n216, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:])
8352
-+		n217, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:])
8353
- 		if err != nil {
8354
- 			return 0, err
8355
- 		}
8356
--		i += n216
8357
-+		i += n217
8358
- 	}
8359
- 	if m.GitRepo != nil {
8360
- 		dAtA[i] = 0x2a
8361
- 		i++
8362
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size()))
8363
--		n217, err := m.GitRepo.MarshalTo(dAtA[i:])
8364
-+		n218, err := m.GitRepo.MarshalTo(dAtA[i:])
8365
- 		if err != nil {
8366
- 			return 0, err
8367
- 		}
8368
--		i += n217
8369
-+		i += n218
8370
- 	}
8371
- 	if m.Secret != nil {
8372
- 		dAtA[i] = 0x32
8373
- 		i++
8374
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size()))
8375
--		n218, err := m.Secret.MarshalTo(dAtA[i:])
8376
-+		n219, err := m.Secret.MarshalTo(dAtA[i:])
8377
- 		if err != nil {
8378
- 			return 0, err
8379
- 		}
8380
--		i += n218
8381
-+		i += n219
8382
- 	}
8383
- 	if m.NFS != nil {
8384
- 		dAtA[i] = 0x3a
8385
- 		i++
8386
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size()))
8387
--		n219, err := m.NFS.MarshalTo(dAtA[i:])
8388
-+		n220, err := m.NFS.MarshalTo(dAtA[i:])
8389
- 		if err != nil {
8390
- 			return 0, err
8391
- 		}
8392
--		i += n219
8393
-+		i += n220
8394
- 	}
8395
- 	if m.ISCSI != nil {
8396
- 		dAtA[i] = 0x42
8397
- 		i++
8398
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size()))
8399
--		n220, err := m.ISCSI.MarshalTo(dAtA[i:])
8400
-+		n221, err := m.ISCSI.MarshalTo(dAtA[i:])
8401
- 		if err != nil {
8402
- 			return 0, err
8403
- 		}
8404
--		i += n220
8405
-+		i += n221
8406
- 	}
8407
- 	if m.Glusterfs != nil {
8408
- 		dAtA[i] = 0x4a
8409
- 		i++
8410
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size()))
8411
--		n221, err := m.Glusterfs.MarshalTo(dAtA[i:])
8412
-+		n222, err := m.Glusterfs.MarshalTo(dAtA[i:])
8413
- 		if err != nil {
8414
- 			return 0, err
8415
- 		}
8416
--		i += n221
8417
-+		i += n222
8418
- 	}
8419
- 	if m.PersistentVolumeClaim != nil {
8420
- 		dAtA[i] = 0x52
8421
- 		i++
8422
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size()))
8423
--		n222, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:])
8424
-+		n223, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:])
8425
- 		if err != nil {
8426
- 			return 0, err
8427
- 		}
8428
--		i += n222
8429
-+		i += n223
8430
- 	}
8431
- 	if m.RBD != nil {
8432
- 		dAtA[i] = 0x5a
8433
- 		i++
8434
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size()))
8435
--		n223, err := m.RBD.MarshalTo(dAtA[i:])
8436
-+		n224, err := m.RBD.MarshalTo(dAtA[i:])
8437
- 		if err != nil {
8438
- 			return 0, err
8439
- 		}
8440
--		i += n223
8441
-+		i += n224
8442
- 	}
8443
- 	if m.FlexVolume != nil {
8444
- 		dAtA[i] = 0x62
8445
- 		i++
8446
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size()))
8447
--		n224, err := m.FlexVolume.MarshalTo(dAtA[i:])
8448
-+		n225, err := m.FlexVolume.MarshalTo(dAtA[i:])
8449
- 		if err != nil {
8450
- 			return 0, err
8451
- 		}
8452
--		i += n224
8453
-+		i += n225
8454
- 	}
8455
- 	if m.Cinder != nil {
8456
- 		dAtA[i] = 0x6a
8457
- 		i++
8458
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size()))
8459
--		n225, err := m.Cinder.MarshalTo(dAtA[i:])
8460
-+		n226, err := m.Cinder.MarshalTo(dAtA[i:])
8461
- 		if err != nil {
8462
- 			return 0, err
8463
- 		}
8464
--		i += n225
8465
-+		i += n226
8466
- 	}
8467
- 	if m.CephFS != nil {
8468
- 		dAtA[i] = 0x72
8469
- 		i++
8470
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size()))
8471
--		n226, err := m.CephFS.MarshalTo(dAtA[i:])
8472
-+		n227, err := m.CephFS.MarshalTo(dAtA[i:])
8473
- 		if err != nil {
8474
- 			return 0, err
8475
- 		}
8476
--		i += n226
8477
-+		i += n227
8478
- 	}
8479
- 	if m.Flocker != nil {
8480
- 		dAtA[i] = 0x7a
8481
- 		i++
8482
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size()))
8483
--		n227, err := m.Flocker.MarshalTo(dAtA[i:])
8484
-+		n228, err := m.Flocker.MarshalTo(dAtA[i:])
8485
- 		if err != nil {
8486
- 			return 0, err
8487
- 		}
8488
--		i += n227
8489
-+		i += n228
8490
- 	}
8491
- 	if m.DownwardAPI != nil {
8492
- 		dAtA[i] = 0x82
8493
-@@ -10672,11 +10718,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8494
- 		dAtA[i] = 0x1
8495
- 		i++
8496
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size()))
8497
--		n228, err := m.DownwardAPI.MarshalTo(dAtA[i:])
8498
-+		n229, err := m.DownwardAPI.MarshalTo(dAtA[i:])
8499
- 		if err != nil {
8500
- 			return 0, err
8501
- 		}
8502
--		i += n228
8503
-+		i += n229
8504
- 	}
8505
- 	if m.FC != nil {
8506
- 		dAtA[i] = 0x8a
8507
-@@ -10684,11 +10730,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8508
- 		dAtA[i] = 0x1
8509
- 		i++
8510
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size()))
8511
--		n229, err := m.FC.MarshalTo(dAtA[i:])
8512
-+		n230, err := m.FC.MarshalTo(dAtA[i:])
8513
- 		if err != nil {
8514
- 			return 0, err
8515
- 		}
8516
--		i += n229
8517
-+		i += n230
8518
- 	}
8519
- 	if m.AzureFile != nil {
8520
- 		dAtA[i] = 0x92
8521
-@@ -10696,11 +10742,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8522
- 		dAtA[i] = 0x1
8523
- 		i++
8524
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size()))
8525
--		n230, err := m.AzureFile.MarshalTo(dAtA[i:])
8526
-+		n231, err := m.AzureFile.MarshalTo(dAtA[i:])
8527
- 		if err != nil {
8528
- 			return 0, err
8529
- 		}
8530
--		i += n230
8531
-+		i += n231
8532
- 	}
8533
- 	if m.ConfigMap != nil {
8534
- 		dAtA[i] = 0x9a
8535
-@@ -10708,11 +10754,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8536
- 		dAtA[i] = 0x1
8537
- 		i++
8538
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size()))
8539
--		n231, err := m.ConfigMap.MarshalTo(dAtA[i:])
8540
-+		n232, err := m.ConfigMap.MarshalTo(dAtA[i:])
8541
- 		if err != nil {
8542
- 			return 0, err
8543
- 		}
8544
--		i += n231
8545
-+		i += n232
8546
- 	}
8547
- 	if m.VsphereVolume != nil {
8548
- 		dAtA[i] = 0xa2
8549
-@@ -10720,11 +10766,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8550
- 		dAtA[i] = 0x1
8551
- 		i++
8552
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size()))
8553
--		n232, err := m.VsphereVolume.MarshalTo(dAtA[i:])
8554
-+		n233, err := m.VsphereVolume.MarshalTo(dAtA[i:])
8555
- 		if err != nil {
8556
- 			return 0, err
8557
- 		}
8558
--		i += n232
8559
-+		i += n233
8560
- 	}
8561
- 	if m.Quobyte != nil {
8562
- 		dAtA[i] = 0xaa
8563
-@@ -10732,23 +10778,23 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8564
- 		dAtA[i] = 0x1
8565
- 		i++
8566
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size()))
8567
--		n233, err := m.Quobyte.MarshalTo(dAtA[i:])
8568
-+		n234, err := m.Quobyte.MarshalTo(dAtA[i:])
8569
- 		if err != nil {
8570
- 			return 0, err
8571
- 		}
8572
--		i += n233
8573
-+		i += n234
8574
- 	}
8575
--	if m.AzureDisk != nil {
8576
-+	if m.CascadeDisk != nil {
8577
- 		dAtA[i] = 0xb2
8578
- 		i++
8579
- 		dAtA[i] = 0x1
8580
- 		i++
8581
--		i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size()))
8582
--		n234, err := m.AzureDisk.MarshalTo(dAtA[i:])
8583
-+		i = encodeVarintGenerated(dAtA, i, uint64(m.CascadeDisk.Size()))
8584
-+		n235, err := m.CascadeDisk.MarshalTo(dAtA[i:])
8585
- 		if err != nil {
8586
- 			return 0, err
8587
- 		}
8588
--		i += n234
8589
-+		i += n235
8590
- 	}
8591
- 	if m.PhotonPersistentDisk != nil {
8592
- 		dAtA[i] = 0xba
8593
-@@ -10756,11 +10802,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8594
- 		dAtA[i] = 0x1
8595
- 		i++
8596
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size()))
8597
--		n235, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:])
8598
-+		n236, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:])
8599
- 		if err != nil {
8600
- 			return 0, err
8601
- 		}
8602
--		i += n235
8603
-+		i += n236
8604
- 	}
8605
- 	if m.PortworxVolume != nil {
8606
- 		dAtA[i] = 0xc2
8607
-@@ -10768,11 +10814,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8608
- 		dAtA[i] = 0x1
8609
- 		i++
8610
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size()))
8611
--		n236, err := m.PortworxVolume.MarshalTo(dAtA[i:])
8612
-+		n237, err := m.PortworxVolume.MarshalTo(dAtA[i:])
8613
- 		if err != nil {
8614
- 			return 0, err
8615
- 		}
8616
--		i += n236
8617
-+		i += n237
8618
- 	}
8619
- 	if m.ScaleIO != nil {
8620
- 		dAtA[i] = 0xca
8621
-@@ -10780,11 +10826,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8622
- 		dAtA[i] = 0x1
8623
- 		i++
8624
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size()))
8625
--		n237, err := m.ScaleIO.MarshalTo(dAtA[i:])
8626
-+		n238, err := m.ScaleIO.MarshalTo(dAtA[i:])
8627
- 		if err != nil {
8628
- 			return 0, err
8629
- 		}
8630
--		i += n237
8631
-+		i += n238
8632
- 	}
8633
- 	if m.Projected != nil {
8634
- 		dAtA[i] = 0xd2
8635
-@@ -10792,11 +10838,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8636
- 		dAtA[i] = 0x1
8637
- 		i++
8638
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size()))
8639
--		n238, err := m.Projected.MarshalTo(dAtA[i:])
8640
-+		n239, err := m.Projected.MarshalTo(dAtA[i:])
8641
- 		if err != nil {
8642
- 			return 0, err
8643
- 		}
8644
--		i += n238
8645
-+		i += n239
8646
- 	}
8647
- 	if m.StorageOS != nil {
8648
- 		dAtA[i] = 0xda
8649
-@@ -10804,11 +10850,23 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
8650
- 		dAtA[i] = 0x1
8651
- 		i++
8652
- 		i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size()))
8653
--		n239, err := m.StorageOS.MarshalTo(dAtA[i:])
8654
-+		n240, err := m.StorageOS.MarshalTo(dAtA[i:])
8655
- 		if err != nil {
8656
- 			return 0, err
8657
- 		}
8658
--		i += n239
8659
-+		i += n240
8660
-+	}
8661
-+	if m.AzureDisk != nil {
8662
-+		dAtA[i] = 0xe2
8663
-+		i++
8664
-+		dAtA[i] = 0x1
8665
-+		i++
8666
-+		i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size()))
8667
-+		n241, err := m.AzureDisk.MarshalTo(dAtA[i:])
8668
-+		if err != nil {
8669
-+			return 0, err
8670
-+		}
8671
-+		i += n241
8672
- 	}
8673
- 	return i, nil
8674
- }
8675
-@@ -10868,11 +10926,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) {
8676
- 	dAtA[i] = 0x12
8677
- 	i++
8678
- 	i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size()))
8679
--	n240, err := m.PodAffinityTerm.MarshalTo(dAtA[i:])
8680
-+	n242, err := m.PodAffinityTerm.MarshalTo(dAtA[i:])
8681
- 	if err != nil {
8682
- 		return 0, err
8683
- 	}
8684
--	i += n240
8685
-+	i += n242
8686
- 	return i, nil
8687
- }
8688
- 
8689
-@@ -11067,6 +11125,16 @@ func (m *Capabilities) Size() (n int) {
8690
- 	return n
8691
- }
8692
- 
8693
-+func (m *CascadeDiskVolumeSource) Size() (n int) {
8694
-+	var l int
8695
-+	_ = l
8696
-+	l = len(m.DiskID)
8697
-+	n += 1 + l + sovGenerated(uint64(l))
8698
-+	l = len(m.FSType)
8699
-+	n += 1 + l + sovGenerated(uint64(l))
8700
-+	return n
8701
-+}
8702
-+
8703
- func (m *CephFSPersistentVolumeSource) Size() (n int) {
8704
- 	var l int
8705
- 	_ = l
8706
-@@ -12776,8 +12844,8 @@ func (m *PersistentVolumeSource) Size() (n int) {
8707
- 		l = m.Quobyte.Size()
8708
- 		n += 1 + l + sovGenerated(uint64(l))
8709
- 	}
8710
--	if m.AzureDisk != nil {
8711
--		l = m.AzureDisk.Size()
8712
-+	if m.CascadeDisk != nil {
8713
-+		l = m.CascadeDisk.Size()
8714
- 		n += 2 + l + sovGenerated(uint64(l))
8715
- 	}
8716
- 	if m.PhotonPersistentDisk != nil {
8717
-@@ -12804,6 +12872,10 @@ func (m *PersistentVolumeSource) Size() (n int) {
8718
- 		l = m.CSI.Size()
8719
- 		n += 2 + l + sovGenerated(uint64(l))
8720
- 	}
8721
-+	if m.AzureDisk != nil {
8722
-+		l = m.AzureDisk.Size()
8723
-+		n += 2 + l + sovGenerated(uint64(l))
8724
-+	}
8725
- 	return n
8726
- }
8727
- 
8728
-@@ -14353,8 +14425,8 @@ func (m *VolumeSource) Size() (n int) {
8729
- 		l = m.Quobyte.Size()
8730
- 		n += 2 + l + sovGenerated(uint64(l))
8731
- 	}
8732
--	if m.AzureDisk != nil {
8733
--		l = m.AzureDisk.Size()
8734
-+	if m.CascadeDisk != nil {
8735
-+		l = m.CascadeDisk.Size()
8736
- 		n += 2 + l + sovGenerated(uint64(l))
8737
- 	}
8738
- 	if m.PhotonPersistentDisk != nil {
8739
-@@ -14377,6 +14449,10 @@ func (m *VolumeSource) Size() (n int) {
8740
- 		l = m.StorageOS.Size()
8741
- 		n += 2 + l + sovGenerated(uint64(l))
8742
- 	}
8743
-+	if m.AzureDisk != nil {
8744
-+		l = m.AzureDisk.Size()
8745
-+		n += 2 + l + sovGenerated(uint64(l))
8746
-+	}
8747
- 	return n
8748
- }
8749
- 
8750
-@@ -14551,6 +14627,17 @@ func (this *Capabilities) String() string {
8751
- 	}, "")
8752
- 	return s
8753
- }
8754
-+func (this *CascadeDiskVolumeSource) String() string {
8755
-+	if this == nil {
8756
-+		return "nil"
8757
-+	}
8758
-+	s := strings.Join([]string{`&CascadeDiskVolumeSource{`,
8759
-+		`DiskID:` + fmt.Sprintf("%v", this.DiskID) + `,`,
8760
-+		`FSType:` + fmt.Sprintf("%v", this.FSType) + `,`,
8761
-+		`}`,
8762
-+	}, "")
8763
-+	return s
8764
-+}
8765
- func (this *CephFSPersistentVolumeSource) String() string {
8766
- 	if this == nil {
8767
- 		return "nil"
8768
-@@ -15920,13 +16007,14 @@ func (this *PersistentVolumeSource) String() string {
8769
- 		`AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFilePersistentVolumeSource", "AzureFilePersistentVolumeSource", 1) + `,`,
8770
- 		`VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`,
8771
- 		`Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`,
8772
--		`AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`,
8773
-+		`CascadeDisk:` + strings.Replace(fmt.Sprintf("%v", this.CascadeDisk), "CascadeDiskVolumeSource", "CascadeDiskVolumeSource", 1) + `,`,
8774
- 		`PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`,
8775
- 		`PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`,
8776
- 		`ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOPersistentVolumeSource", "ScaleIOPersistentVolumeSource", 1) + `,`,
8777
- 		`Local:` + strings.Replace(fmt.Sprintf("%v", this.Local), "LocalVolumeSource", "LocalVolumeSource", 1) + `,`,
8778
- 		`StorageOS:` + strings.Replace(fmt.Sprintf("%v", this.StorageOS), "StorageOSPersistentVolumeSource", "StorageOSPersistentVolumeSource", 1) + `,`,
8779
- 		`CSI:` + strings.Replace(fmt.Sprintf("%v", this.CSI), "CSIPersistentVolumeSource", "CSIPersistentVolumeSource", 1) + `,`,
8780
-+		`AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`,
8781
- 		`}`,
8782
- 	}, "")
8783
- 	return s
8784
-@@ -17137,12 +17225,13 @@ func (this *VolumeSource) String() string {
8785
- 		`ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapVolumeSource", "ConfigMapVolumeSource", 1) + `,`,
8786
- 		`VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`,
8787
- 		`Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`,
8788
--		`AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`,
8789
-+		`CascadeDisk:` + strings.Replace(fmt.Sprintf("%v", this.CascadeDisk), "CascadeDiskVolumeSource", "CascadeDiskVolumeSource", 1) + `,`,
8790
- 		`PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`,
8791
- 		`PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`,
8792
- 		`ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOVolumeSource", "ScaleIOVolumeSource", 1) + `,`,
8793
- 		`Projected:` + strings.Replace(fmt.Sprintf("%v", this.Projected), "ProjectedVolumeSource", "ProjectedVolumeSource", 1) + `,`,
8794
- 		`StorageOS:` + strings.Replace(fmt.Sprintf("%v", this.StorageOS), "StorageOSVolumeSource", "StorageOSVolumeSource", 1) + `,`,
8795
-+		`AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`,
8796
- 		`}`,
8797
- 	}, "")
8798
- 	return s
8799
-@@ -18759,6 +18848,114 @@ func (m *Capabilities) Unmarshal(dAtA []byte) error {
8800
- 	}
8801
- 	return nil
8802
- }
8803
-+func (m *CascadeDiskVolumeSource) Unmarshal(dAtA []byte) error {
8804
-+	l := len(dAtA)
8805
-+	iNdEx := 0
8806
-+	for iNdEx < l {
8807
-+		preIndex := iNdEx
8808
-+		var wire uint64
8809
-+		for shift := uint(0); ; shift += 7 {
8810
-+			if shift >= 64 {
8811
-+				return ErrIntOverflowGenerated
8812
-+			}
8813
-+			if iNdEx >= l {
8814
-+				return io.ErrUnexpectedEOF
8815
-+			}
8816
-+			b := dAtA[iNdEx]
8817
-+			iNdEx++
8818
-+			wire |= (uint64(b) & 0x7F) << shift
8819
-+			if b < 0x80 {
8820
-+				break
8821
-+			}
8822
-+		}
8823
-+		fieldNum := int32(wire >> 3)
8824
-+		wireType := int(wire & 0x7)
8825
-+		if wireType == 4 {
8826
-+			return fmt.Errorf("proto: CascadeDiskVolumeSource: wiretype end group for non-group")
8827
-+		}
8828
-+		if fieldNum <= 0 {
8829
-+			return fmt.Errorf("proto: CascadeDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire)
8830
-+		}
8831
-+		switch fieldNum {
8832
-+		case 1:
8833
-+			if wireType != 2 {
8834
-+				return fmt.Errorf("proto: wrong wireType = %d for field DiskID", wireType)
8835
-+			}
8836
-+			var stringLen uint64
8837
-+			for shift := uint(0); ; shift += 7 {
8838
-+				if shift >= 64 {
8839
-+					return ErrIntOverflowGenerated
8840
-+				}
8841
-+				if iNdEx >= l {
8842
-+					return io.ErrUnexpectedEOF
8843
-+				}
8844
-+				b := dAtA[iNdEx]
8845
-+				iNdEx++
8846
-+				stringLen |= (uint64(b) & 0x7F) << shift
8847
-+				if b < 0x80 {
8848
-+					break
8849
-+				}
8850
-+			}
8851
-+			intStringLen := int(stringLen)
8852
-+			if intStringLen < 0 {
8853
-+				return ErrInvalidLengthGenerated
8854
-+			}
8855
-+			postIndex := iNdEx + intStringLen
8856
-+			if postIndex > l {
8857
-+				return io.ErrUnexpectedEOF
8858
-+			}
8859
-+			m.DiskID = string(dAtA[iNdEx:postIndex])
8860
-+			iNdEx = postIndex
8861
-+		case 2:
8862
-+			if wireType != 2 {
8863
-+				return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType)
8864
-+			}
8865
-+			var stringLen uint64
8866
-+			for shift := uint(0); ; shift += 7 {
8867
-+				if shift >= 64 {
8868
-+					return ErrIntOverflowGenerated
8869
-+				}
8870
-+				if iNdEx >= l {
8871
-+					return io.ErrUnexpectedEOF
8872
-+				}
8873
-+				b := dAtA[iNdEx]
8874
-+				iNdEx++
8875
-+				stringLen |= (uint64(b) & 0x7F) << shift
8876
-+				if b < 0x80 {
8877
-+					break
8878
-+				}
8879
-+			}
8880
-+			intStringLen := int(stringLen)
8881
-+			if intStringLen < 0 {
8882
-+				return ErrInvalidLengthGenerated
8883
-+			}
8884
-+			postIndex := iNdEx + intStringLen
8885
-+			if postIndex > l {
8886
-+				return io.ErrUnexpectedEOF
8887
-+			}
8888
-+			m.FSType = string(dAtA[iNdEx:postIndex])
8889
-+			iNdEx = postIndex
8890
-+		default:
8891
-+			iNdEx = preIndex
8892
-+			skippy, err := skipGenerated(dAtA[iNdEx:])
8893
-+			if err != nil {
8894
-+				return err
8895
-+			}
8896
-+			if skippy < 0 {
8897
-+				return ErrInvalidLengthGenerated
8898
-+			}
8899
-+			if (iNdEx + skippy) > l {
8900
-+				return io.ErrUnexpectedEOF
8901
-+			}
8902
-+			iNdEx += skippy
8903
-+		}
8904
-+	}
8905
-+
8906
-+	if iNdEx > l {
8907
-+		return io.ErrUnexpectedEOF
8908
-+	}
8909
-+	return nil
8910
-+}
8911
- func (m *CephFSPersistentVolumeSource) Unmarshal(dAtA []byte) error {
8912
- 	l := len(dAtA)
8913
- 	iNdEx := 0
8914
-@@ -35229,7 +35426,7 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error {
8915
- 			iNdEx = postIndex
8916
- 		case 16:
8917
- 			if wireType != 2 {
8918
--				return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType)
8919
-+				return fmt.Errorf("proto: wrong wireType = %d for field CascadeDisk", wireType)
8920
- 			}
8921
- 			var msglen int
8922
- 			for shift := uint(0); ; shift += 7 {
8923
-@@ -35253,10 +35450,10 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error {
8924
- 			if postIndex > l {
8925
- 				return io.ErrUnexpectedEOF
8926
- 			}
8927
--			if m.AzureDisk == nil {
8928
--				m.AzureDisk = &AzureDiskVolumeSource{}
8929
-+			if m.CascadeDisk == nil {
8930
-+				m.CascadeDisk = &CascadeDiskVolumeSource{}
8931
- 			}
8932
--			if err := m.AzureDisk.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
8933
-+			if err := m.CascadeDisk.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
8934
- 				return err
8935
- 			}
8936
- 			iNdEx = postIndex
8937
-@@ -35458,6 +35655,39 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error {
8938
- 				return err
8939
- 			}
8940
- 			iNdEx = postIndex
8941
-+		case 23:
8942
-+			if wireType != 2 {
8943
-+				return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType)
8944
-+			}
8945
-+			var msglen int
8946
-+			for shift := uint(0); ; shift += 7 {
8947
-+				if shift >= 64 {
8948
-+					return ErrIntOverflowGenerated
8949
-+				}
8950
-+				if iNdEx >= l {
8951
-+					return io.ErrUnexpectedEOF
8952
-+				}
8953
-+				b := dAtA[iNdEx]
8954
-+				iNdEx++
8955
-+				msglen |= (int(b) & 0x7F) << shift
8956
-+				if b < 0x80 {
8957
-+					break
8958
-+				}
8959
-+			}
8960
-+			if msglen < 0 {
8961
-+				return ErrInvalidLengthGenerated
8962
-+			}
8963
-+			postIndex := iNdEx + msglen
8964
-+			if postIndex > l {
8965
-+				return io.ErrUnexpectedEOF
8966
-+			}
8967
-+			if m.AzureDisk == nil {
8968
-+				m.AzureDisk = &AzureDiskVolumeSource{}
8969
-+			}
8970
-+			if err := m.AzureDisk.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
8971
-+				return err
8972
-+			}
8973
-+			iNdEx = postIndex
8974
- 		default:
8975
- 			iNdEx = preIndex
8976
- 			skippy, err := skipGenerated(dAtA[iNdEx:])
8977
-@@ -50377,7 +50607,7 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error {
8978
- 			iNdEx = postIndex
8979
- 		case 22:
8980
- 			if wireType != 2 {
8981
--				return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType)
8982
-+				return fmt.Errorf("proto: wrong wireType = %d for field CascadeDisk", wireType)
8983
- 			}
8984
- 			var msglen int
8985
- 			for shift := uint(0); ; shift += 7 {
8986
-@@ -50401,10 +50631,10 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error {
8987
- 			if postIndex > l {
8988
- 				return io.ErrUnexpectedEOF
8989
- 			}
8990
--			if m.AzureDisk == nil {
8991
--				m.AzureDisk = &AzureDiskVolumeSource{}
8992
-+			if m.CascadeDisk == nil {
8993
-+				m.CascadeDisk = &CascadeDiskVolumeSource{}
8994
- 			}
8995
--			if err := m.AzureDisk.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
8996
-+			if err := m.CascadeDisk.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
8997
- 				return err
8998
- 			}
8999
- 			iNdEx = postIndex
9000
-@@ -50573,6 +50803,39 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error {
9001
- 				return err
9002
- 			}
9003
- 			iNdEx = postIndex
9004
-+		case 28:
9005
-+			if wireType != 2 {
9006
-+				return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType)
9007
-+			}
9008
-+			var msglen int
9009
-+			for shift := uint(0); ; shift += 7 {
9010
-+				if shift >= 64 {
9011
-+					return ErrIntOverflowGenerated
9012
-+				}
9013
-+				if iNdEx >= l {
9014
-+					return io.ErrUnexpectedEOF
9015
-+				}
9016
-+				b := dAtA[iNdEx]
9017
-+				iNdEx++
9018
-+				msglen |= (int(b) & 0x7F) << shift
9019
-+				if b < 0x80 {
9020
-+					break
9021
-+				}
9022
-+			}
9023
-+			if msglen < 0 {
9024
-+				return ErrInvalidLengthGenerated
9025
-+			}
9026
-+			postIndex := iNdEx + msglen
9027
-+			if postIndex > l {
9028
-+				return io.ErrUnexpectedEOF
9029
-+			}
9030
-+			if m.AzureDisk == nil {
9031
-+				m.AzureDisk = &AzureDiskVolumeSource{}
9032
-+			}
9033
-+			if err := m.AzureDisk.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
9034
-+				return err
9035
-+			}
9036
-+			iNdEx = postIndex
9037
- 		default:
9038
- 			iNdEx = preIndex
9039
- 			skippy, err := skipGenerated(dAtA[iNdEx:])
9040
-@@ -50969,797 +51232,802 @@ func init() {
9041
- }
9042
- 
9043
- var fileDescriptorGenerated = []byte{
9044
--	// 12669 bytes of a gzipped FileDescriptorProto
9045
-+	// 12751 bytes of a gzipped FileDescriptorProto
9046
- 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x6c, 0x24, 0x57,
9047
--	0x76, 0x18, 0xbc, 0xd5, 0xdd, 0x7c, 0xf4, 0xe1, 0xfb, 0xce, 0x43, 0x1c, 0x4a, 0x33, 0x3d, 0x2a,
9048
--	0xed, 0x8e, 0x46, 0x2b, 0x89, 0xb3, 0x1a, 0x49, 0x2b, 0x79, 0xb5, 0x2b, 0x9b, 0x64, 0x93, 0x33,
9049
--	0xd4, 0x0c, 0x39, 0xad, 0xdb, 0x9c, 0xd1, 0xae, 0xac, 0x5d, 0x6f, 0xb1, 0xfb, 0xb2, 0x59, 0x62,
9050
--	0xb1, 0xaa, 0x55, 0x55, 0xcd, 0x19, 0xea, 0xb3, 0x81, 0x2f, 0xeb, 0xd8, 0x89, 0x1f, 0x08, 0x16,
9051
--	0xb1, 0x91, 0x87, 0x6d, 0x38, 0x80, 0xe3, 0xc0, 0x76, 0x9c, 0x04, 0x71, 0xec, 0xd8, 0xce, 0xae,
9052
--	0x9d, 0x38, 0x4e, 0x7e, 0x38, 0x7f, 0x36, 0x4e, 0x80, 0x60, 0x0d, 0x18, 0x61, 0x6c, 0xda, 0x49,
9053
--	0xe0, 0x1f, 0x79, 0x20, 0xce, 0x1f, 0x33, 0x46, 0x1c, 0xdc, 0x67, 0xdd, 0x5b, 0x5d, 0xd5, 0xdd,
9054
--	0x1c, 0x71, 0x28, 0xd9, 0xd8, 0x7f, 0xdd, 0xf7, 0x9c, 0x7b, 0xee, 0xad, 0xfb, 0x3c, 0xe7, 0xdc,
9055
--	0xf3, 0x80, 0xd7, 0x76, 0x5e, 0x8d, 0xe6, 0xdd, 0xe0, 0xda, 0x4e, 0x67, 0x93, 0x84, 0x3e, 0x89,
9056
--	0x49, 0x74, 0x6d, 0x8f, 0xf8, 0xcd, 0x20, 0xbc, 0x26, 0x00, 0x4e, 0xdb, 0xbd, 0xd6, 0x08, 0x42,
9057
--	0x72, 0x6d, 0xef, 0x85, 0x6b, 0x2d, 0xe2, 0x93, 0xd0, 0x89, 0x49, 0x73, 0xbe, 0x1d, 0x06, 0x71,
9058
--	0x80, 0x10, 0xc7, 0x99, 0x77, 0xda, 0xee, 0x3c, 0xc5, 0x99, 0xdf, 0x7b, 0x61, 0xee, 0xf9, 0x96,
9059
--	0x1b, 0x6f, 0x77, 0x36, 0xe7, 0x1b, 0xc1, 0xee, 0xb5, 0x56, 0xd0, 0x0a, 0xae, 0x31, 0xd4, 0xcd,
9060
--	0xce, 0x16, 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x9c, 0xc4, 0xdc, 0x4b, 0x49, 0x33, 0xbb, 0x4e, 0x63,
9061
--	0xdb, 0xf5, 0x49, 0xb8, 0x7f, 0xad, 0xbd, 0xd3, 0x62, 0xed, 0x86, 0x24, 0x0a, 0x3a, 0x61, 0x83,
9062
--	0xa4, 0x1b, 0xee, 0x59, 0x2b, 0xba, 0xb6, 0x4b, 0x62, 0x27, 0xa3, 0xbb, 0x73, 0xd7, 0xf2, 0x6a,
9063
--	0x85, 0x1d, 0x3f, 0x76, 0x77, 0xbb, 0x9b, 0xf9, 0x74, 0xbf, 0x0a, 0x51, 0x63, 0x9b, 0xec, 0x3a,
9064
--	0x5d, 0xf5, 0x5e, 0xcc, 0xab, 0xd7, 0x89, 0x5d, 0xef, 0x9a, 0xeb, 0xc7, 0x51, 0x1c, 0xa6, 0x2b,
9065
--	0xd9, 0xdf, 0xb4, 0xe0, 0xf2, 0xc2, 0x5b, 0xf5, 0x65, 0xcf, 0x89, 0x62, 0xb7, 0xb1, 0xe8, 0x05,
9066
--	0x8d, 0x9d, 0x7a, 0x1c, 0x84, 0xe4, 0x5e, 0xe0, 0x75, 0x76, 0x49, 0x9d, 0x0d, 0x04, 0x7a, 0x0e,
9067
--	0x46, 0xf7, 0xd8, 0xff, 0xd5, 0xea, 0xac, 0x75, 0xd9, 0xba, 0x5a, 0x5e, 0x9c, 0xfe, 0xad, 0x83,
9068
--	0xca, 0xc7, 0x0e, 0x0f, 0x2a, 0xa3, 0xf7, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x0a, 0x0c, 0x6f, 0x45,
9069
--	0x1b, 0xfb, 0x6d, 0x32, 0x5b, 0x60, 0xb8, 0x93, 0x02, 0x77, 0x78, 0xa5, 0x4e, 0x4b, 0xb1, 0x80,
9070
--	0xa2, 0x6b, 0x50, 0x6e, 0x3b, 0x61, 0xec, 0xc6, 0x6e, 0xe0, 0xcf, 0x16, 0x2f, 0x5b, 0x57, 0x87,
9071
--	0x16, 0x67, 0x04, 0x6a, 0xb9, 0x26, 0x01, 0x38, 0xc1, 0xa1, 0xdd, 0x08, 0x89, 0xd3, 0xbc, 0xe3,
9072
--	0x7b, 0xfb, 0xb3, 0xa5, 0xcb, 0xd6, 0xd5, 0xd1, 0xa4, 0x1b, 0x58, 0x94, 0x63, 0x85, 0x61, 0xff,
9073
--	0x58, 0x01, 0x46, 0x17, 0xb6, 0xb6, 0x5c, 0xdf, 0x8d, 0xf7, 0xd1, 0x3d, 0x18, 0xf7, 0x83, 0x26,
9074
--	0x91, 0xff, 0xd9, 0x57, 0x8c, 0x5d, 0xbf, 0x3c, 0xdf, 0xbd, 0x94, 0xe6, 0xd7, 0x35, 0xbc, 0xc5,
9075
--	0xe9, 0xc3, 0x83, 0xca, 0xb8, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x58, 0x3b, 0x68, 0x2a, 0xb2,
9076
--	0x05, 0x46, 0xb6, 0x92, 0x45, 0xb6, 0x96, 0xa0, 0x2d, 0x4e, 0x1d, 0x1e, 0x54, 0xc6, 0xb4, 0x02,
9077
--	0xac, 0x13, 0x41, 0x9b, 0x30, 0x45, 0xff, 0xfa, 0xb1, 0xab, 0xe8, 0x16, 0x19, 0xdd, 0xa7, 0xf2,
9078
--	0xe8, 0x6a, 0xa8, 0x8b, 0x67, 0x0e, 0x0f, 0x2a, 0x53, 0xa9, 0x42, 0x9c, 0x26, 0x68, 0xbf, 0x0f,
9079
--	0x93, 0x0b, 0x71, 0xec, 0x34, 0xb6, 0x49, 0x93, 0xcf, 0x20, 0x7a, 0x09, 0x4a, 0xbe, 0xb3, 0x4b,
9080
--	0xc4, 0xfc, 0x5e, 0x16, 0x03, 0x5b, 0x5a, 0x77, 0x76, 0xc9, 0xd1, 0x41, 0x65, 0xfa, 0xae, 0xef,
9081
--	0xbe, 0xd7, 0x11, 0xab, 0x82, 0x96, 0x61, 0x86, 0x8d, 0xae, 0x03, 0x34, 0xc9, 0x9e, 0xdb, 0x20,
9082
--	0x35, 0x27, 0xde, 0x16, 0xf3, 0x8d, 0x44, 0x5d, 0xa8, 0x2a, 0x08, 0xd6, 0xb0, 0xec, 0x07, 0x50,
9083
--	0x5e, 0xd8, 0x0b, 0xdc, 0x66, 0x2d, 0x68, 0x46, 0x68, 0x07, 0xa6, 0xda, 0x21, 0xd9, 0x22, 0xa1,
9084
--	0x2a, 0x9a, 0xb5, 0x2e, 0x17, 0xaf, 0x8e, 0x5d, 0xbf, 0x9a, 0xf9, 0xb1, 0x26, 0xea, 0xb2, 0x1f,
9085
--	0x87, 0xfb, 0x8b, 0x8f, 0x89, 0xf6, 0xa6, 0x52, 0x50, 0x9c, 0xa6, 0x6c, 0xff, 0xeb, 0x02, 0x9c,
9086
--	0x5b, 0x78, 0xbf, 0x13, 0x92, 0xaa, 0x1b, 0xed, 0xa4, 0x57, 0x78, 0xd3, 0x8d, 0x76, 0xd6, 0x93,
9087
--	0x11, 0x50, 0x4b, 0xab, 0x2a, 0xca, 0xb1, 0xc2, 0x40, 0xcf, 0xc3, 0x08, 0xfd, 0x7d, 0x17, 0xaf,
9088
--	0x8a, 0x4f, 0x3e, 0x23, 0x90, 0xc7, 0xaa, 0x4e, 0xec, 0x54, 0x39, 0x08, 0x4b, 0x1c, 0xb4, 0x06,
9089
--	0x63, 0x0d, 0xb6, 0x21, 0x5b, 0x6b, 0x41, 0x93, 0xb0, 0xc9, 0x2c, 0x2f, 0x3e, 0x4b, 0xd1, 0x97,
9090
--	0x92, 0xe2, 0xa3, 0x83, 0xca, 0x2c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a,
9091
--	0x7f, 0x95, 0x18, 0x25, 0xc8, 0xd8, 0x5b, 0x57, 0xb5, 0xad, 0x32, 0xc4, 0xb6, 0xca, 0x78, 0xf6,
9092
--	0x36, 0x41, 0x2f, 0x40, 0x69, 0xc7, 0xf5, 0x9b, 0xb3, 0xc3, 0x8c, 0xd6, 0x45, 0x3a, 0xe7, 0xb7,
9093
--	0x5c, 0xbf, 0x79, 0x74, 0x50, 0x99, 0x31, 0xba, 0x43, 0x0b, 0x31, 0x43, 0xb5, 0xff, 0xd8, 0x82,
9094
--	0x0a, 0x83, 0xad, 0xb8, 0x1e, 0xa9, 0x91, 0x30, 0x72, 0xa3, 0x98, 0xf8, 0xb1, 0x31, 0xa0, 0xd7,
9095
--	0x01, 0x22, 0xd2, 0x08, 0x49, 0xac, 0x0d, 0xa9, 0x5a, 0x18, 0x75, 0x05, 0xc1, 0x1a, 0x16, 0x3d,
9096
--	0x10, 0xa2, 0x6d, 0x27, 0x64, 0xeb, 0x4b, 0x0c, 0xac, 0x3a, 0x10, 0xea, 0x12, 0x80, 0x13, 0x1c,
9097
--	0xe3, 0x40, 0x28, 0xf6, 0x3b, 0x10, 0xd0, 0xe7, 0x60, 0x2a, 0x69, 0x2c, 0x6a, 0x3b, 0x0d, 0x39,
9098
--	0x80, 0x6c, 0xcb, 0xd4, 0x4d, 0x10, 0x4e, 0xe3, 0xda, 0x7f, 0xdf, 0x12, 0x8b, 0x87, 0x7e, 0xf5,
9099
--	0x47, 0xfc, 0x5b, 0xed, 0x5f, 0xb5, 0x60, 0x64, 0xd1, 0xf5, 0x9b, 0xae, 0xdf, 0x42, 0x5f, 0x86,
9100
--	0x51, 0x7a, 0x37, 0x35, 0x9d, 0xd8, 0x11, 0xe7, 0xde, 0xa7, 0xb4, 0xbd, 0xa5, 0xae, 0x8a, 0xf9,
9101
--	0xf6, 0x4e, 0x8b, 0x16, 0x44, 0xf3, 0x14, 0x9b, 0xee, 0xb6, 0x3b, 0x9b, 0xef, 0x92, 0x46, 0xbc,
9102
--	0x46, 0x62, 0x27, 0xf9, 0x9c, 0xa4, 0x0c, 0x2b, 0xaa, 0xe8, 0x16, 0x0c, 0xc7, 0x4e, 0xd8, 0x22,
9103
--	0xb1, 0x38, 0x00, 0x33, 0x0f, 0x2a, 0x5e, 0x13, 0xd3, 0x1d, 0x49, 0xfc, 0x06, 0x49, 0xae, 0x85,
9104
--	0x0d, 0x56, 0x15, 0x0b, 0x12, 0xf6, 0x0f, 0x0e, 0xc3, 0x85, 0xa5, 0xfa, 0x6a, 0xce, 0xba, 0xba,
9105
--	0x02, 0xc3, 0xcd, 0xd0, 0xdd, 0x23, 0xa1, 0x18, 0x67, 0x45, 0xa5, 0xca, 0x4a, 0xb1, 0x80, 0xa2,
9106
--	0x57, 0x61, 0x9c, 0x5f, 0x48, 0x37, 0x1d, 0xbf, 0xe9, 0xc9, 0x21, 0x3e, 0x2b, 0xb0, 0xc7, 0xef,
9107
--	0x69, 0x30, 0x6c, 0x60, 0x1e, 0x73, 0x51, 0x5d, 0x49, 0x6d, 0xc6, 0xbc, 0xcb, 0xee, 0x07, 0x2c,
9108
--	0x98, 0xe6, 0xcd, 0x2c, 0xc4, 0x71, 0xe8, 0x6e, 0x76, 0x62, 0x12, 0xcd, 0x0e, 0xb1, 0x93, 0x6e,
9109
--	0x29, 0x6b, 0xb4, 0x72, 0x47, 0x60, 0xfe, 0x5e, 0x8a, 0x0a, 0x3f, 0x04, 0x67, 0x45, 0xbb, 0xd3,
9110
--	0x69, 0x30, 0xee, 0x6a, 0x16, 0x7d, 0xaf, 0x05, 0x73, 0x8d, 0xc0, 0x8f, 0xc3, 0xc0, 0xf3, 0x48,
9111
--	0x58, 0xeb, 0x6c, 0x7a, 0x6e, 0xb4, 0xcd, 0xd7, 0x29, 0x26, 0x5b, 0xec, 0x24, 0xc8, 0x99, 0x43,
9112
--	0x85, 0x24, 0xe6, 0xf0, 0xd2, 0xe1, 0x41, 0x65, 0x6e, 0x29, 0x97, 0x14, 0xee, 0xd1, 0x0c, 0xda,
9113
--	0x01, 0x44, 0xaf, 0xd2, 0x7a, 0xec, 0xb4, 0x48, 0xd2, 0xf8, 0xc8, 0xe0, 0x8d, 0x9f, 0x3f, 0x3c,
9114
--	0xa8, 0xa0, 0xf5, 0x2e, 0x12, 0x38, 0x83, 0x2c, 0x7a, 0x0f, 0xce, 0xd2, 0xd2, 0xae, 0x6f, 0x1d,
9115
--	0x1d, 0xbc, 0xb9, 0xd9, 0xc3, 0x83, 0xca, 0xd9, 0xf5, 0x0c, 0x22, 0x38, 0x93, 0xf4, 0xdc, 0x12,
9116
--	0x9c, 0xcb, 0x9c, 0x2a, 0x34, 0x0d, 0xc5, 0x1d, 0xc2, 0x59, 0x90, 0x32, 0xa6, 0x3f, 0xd1, 0x59,
9117
--	0x18, 0xda, 0x73, 0xbc, 0x8e, 0x58, 0xa5, 0x98, 0xff, 0xf9, 0x4c, 0xe1, 0x55, 0xcb, 0x6e, 0xc0,
9118
--	0xf8, 0x92, 0xd3, 0x76, 0x36, 0x5d, 0xcf, 0x8d, 0x5d, 0x12, 0xa1, 0xa7, 0xa1, 0xe8, 0x34, 0x9b,
9119
--	0xec, 0x8a, 0x2c, 0x2f, 0x9e, 0x3b, 0x3c, 0xa8, 0x14, 0x17, 0x9a, 0xf4, 0xac, 0x06, 0x85, 0xb5,
9120
--	0x8f, 0x29, 0x06, 0xfa, 0x24, 0x94, 0x9a, 0x61, 0xd0, 0x9e, 0x2d, 0x30, 0x4c, 0x3a, 0x54, 0xa5,
9121
--	0x6a, 0x18, 0xb4, 0x53, 0xa8, 0x0c, 0xc7, 0xfe, 0x8d, 0x02, 0x3c, 0xb1, 0x44, 0xda, 0xdb, 0x2b,
9122
--	0xf5, 0x9c, 0x4d, 0x77, 0x15, 0x46, 0x77, 0x03, 0xdf, 0x8d, 0x83, 0x30, 0x12, 0x4d, 0xb3, 0xdb,
9123
--	0x64, 0x4d, 0x94, 0x61, 0x05, 0x45, 0x97, 0xa1, 0xd4, 0x4e, 0x38, 0x81, 0x71, 0xc9, 0x45, 0x30,
9124
--	0x1e, 0x80, 0x41, 0x28, 0x46, 0x27, 0x22, 0xa1, 0xb8, 0x05, 0x15, 0xc6, 0xdd, 0x88, 0x84, 0x98,
9125
--	0x41, 0x92, 0xe3, 0x94, 0x1e, 0xb4, 0x62, 0x5b, 0xa5, 0x8e, 0x53, 0x0a, 0xc1, 0x1a, 0x16, 0xaa,
9126
--	0x41, 0x39, 0x52, 0x93, 0x3a, 0x34, 0xf8, 0xa4, 0x4e, 0xb0, 0xf3, 0x56, 0xcd, 0x64, 0x42, 0xc4,
9127
--	0x38, 0x06, 0x86, 0xfb, 0x9e, 0xb7, 0x5f, 0x2f, 0x00, 0xe2, 0x43, 0xf8, 0xe7, 0x6c, 0xe0, 0xee,
9128
--	0x76, 0x0f, 0x5c, 0x26, 0xe7, 0x75, 0x3b, 0x68, 0x38, 0x5e, 0xfa, 0x08, 0x3f, 0xa9, 0xd1, 0xfb,
9129
--	0xdf, 0x16, 0x3c, 0xb1, 0xe4, 0xfa, 0x4d, 0x12, 0xe6, 0x2c, 0xc0, 0x47, 0x23, 0x80, 0x1c, 0xef,
9130
--	0xa4, 0x37, 0x96, 0x58, 0xe9, 0x04, 0x96, 0x98, 0xfd, 0x3f, 0x2c, 0x40, 0xfc, 0xb3, 0x3f, 0x72,
9131
--	0x1f, 0x7b, 0xb7, 0xfb, 0x63, 0x4f, 0x60, 0x59, 0xd8, 0xb7, 0x61, 0x72, 0xc9, 0x73, 0x89, 0x1f,
9132
--	0xaf, 0xd6, 0x96, 0x02, 0x7f, 0xcb, 0x6d, 0xa1, 0xcf, 0xc0, 0x24, 0x95, 0x69, 0x83, 0x4e, 0x5c,
9133
--	0x27, 0x8d, 0xc0, 0x67, 0xec, 0x3f, 0x95, 0x04, 0xd1, 0xe1, 0x41, 0x65, 0x72, 0xc3, 0x80, 0xe0,
9134
--	0x14, 0xa6, 0xfd, 0xbb, 0x74, 0xfc, 0x82, 0xdd, 0x76, 0xe0, 0x13, 0x3f, 0x5e, 0x0a, 0xfc, 0x26,
9135
--	0x17, 0x13, 0x3f, 0x03, 0xa5, 0x98, 0x8e, 0x07, 0x1f, 0xbb, 0x2b, 0x72, 0xa3, 0xd0, 0x51, 0x38,
9136
--	0x3a, 0xa8, 0x9c, 0xef, 0xae, 0xc1, 0xc6, 0x89, 0xd5, 0x41, 0xdf, 0x06, 0xc3, 0x51, 0xec, 0xc4,
9137
--	0x9d, 0x48, 0x8c, 0xe6, 0x93, 0x72, 0x34, 0xeb, 0xac, 0xf4, 0xe8, 0xa0, 0x32, 0xa5, 0xaa, 0xf1,
9138
--	0x22, 0x2c, 0x2a, 0xa0, 0x67, 0x60, 0x64, 0x97, 0x44, 0x91, 0xd3, 0x92, 0x1c, 0xfe, 0x94, 0xa8,
9139
--	0x3b, 0xb2, 0xc6, 0x8b, 0xb1, 0x84, 0xa3, 0xa7, 0x60, 0x88, 0x84, 0x61, 0x10, 0x8a, 0x3d, 0x3a,
9140
--	0x21, 0x10, 0x87, 0x96, 0x69, 0x21, 0xe6, 0x30, 0xfb, 0xdf, 0x5a, 0x30, 0xa5, 0xfa, 0xca, 0xdb,
9141
--	0x3a, 0x05, 0x56, 0xee, 0x6d, 0x80, 0x86, 0xfc, 0xc0, 0x88, 0xdd, 0x1e, 0x63, 0xd7, 0xaf, 0x64,
9142
--	0x32, 0x28, 0x5d, 0xc3, 0x98, 0x50, 0x56, 0x45, 0x11, 0xd6, 0xa8, 0xd9, 0xbf, 0x6e, 0xc1, 0x99,
9143
--	0xd4, 0x17, 0xdd, 0x76, 0xa3, 0x18, 0xbd, 0xd3, 0xf5, 0x55, 0xf3, 0x83, 0x7d, 0x15, 0xad, 0xcd,
9144
--	0xbe, 0x49, 0x2d, 0x65, 0x59, 0xa2, 0x7d, 0xd1, 0x4d, 0x18, 0x72, 0x63, 0xb2, 0x2b, 0x3f, 0xe6,
9145
--	0xa9, 0x9e, 0x1f, 0xc3, 0x7b, 0x95, 0xcc, 0xc8, 0x2a, 0xad, 0x89, 0x39, 0x01, 0xfb, 0x47, 0x8a,
9146
--	0x50, 0xe6, 0xcb, 0x76, 0xcd, 0x69, 0x9f, 0xc2, 0x5c, 0xac, 0x42, 0x89, 0x51, 0xe7, 0x1d, 0x7f,
9147
--	0x3a, 0xbb, 0xe3, 0xa2, 0x3b, 0xf3, 0x54, 0x4e, 0xe3, 0xac, 0xa0, 0xba, 0x1a, 0x68, 0x11, 0x66,
9148
--	0x24, 0x90, 0x03, 0xb0, 0xe9, 0xfa, 0x4e, 0xb8, 0x4f, 0xcb, 0x66, 0x8b, 0x8c, 0xe0, 0xf3, 0xbd,
9149
--	0x09, 0x2e, 0x2a, 0x7c, 0x4e, 0x56, 0xf5, 0x35, 0x01, 0x60, 0x8d, 0xe8, 0xdc, 0x2b, 0x50, 0x56,
9150
--	0xc8, 0xc7, 0xe1, 0x71, 0xe6, 0x3e, 0x07, 0x53, 0xa9, 0xb6, 0xfa, 0x55, 0x1f, 0xd7, 0x59, 0xa4,
9151
--	0xaf, 0xb1, 0x53, 0x40, 0xf4, 0x7a, 0xd9, 0xdf, 0x13, 0xa7, 0xe8, 0xfb, 0x70, 0xd6, 0xcb, 0x38,
9152
--	0x9c, 0xc4, 0x54, 0x0d, 0x7e, 0x98, 0x3d, 0x21, 0x3e, 0xfb, 0x6c, 0x16, 0x14, 0x67, 0xb6, 0x41,
9153
--	0xaf, 0xfd, 0xa0, 0x4d, 0xd7, 0xbc, 0xe3, 0xb1, 0xfe, 0x0a, 0xe9, 0xfb, 0x8e, 0x28, 0xc3, 0x0a,
9154
--	0x4a, 0x8f, 0xb0, 0xb3, 0xaa, 0xf3, 0xb7, 0xc8, 0x7e, 0x9d, 0x78, 0xa4, 0x11, 0x07, 0xe1, 0x87,
9155
--	0xda, 0xfd, 0x8b, 0x7c, 0xf4, 0xf9, 0x09, 0x38, 0x26, 0x08, 0x14, 0x6f, 0x91, 0x7d, 0x3e, 0x15,
9156
--	0xfa, 0xd7, 0x15, 0x7b, 0x7e, 0xdd, 0x2f, 0x58, 0x30, 0xa1, 0xbe, 0xee, 0x14, 0xb6, 0xfa, 0xa2,
9157
--	0xb9, 0xd5, 0x2f, 0xf6, 0x5c, 0xe0, 0x39, 0x9b, 0xfc, 0xeb, 0x05, 0xb8, 0xa0, 0x70, 0x28, 0xbb,
9158
--	0xcf, 0xff, 0x88, 0x55, 0x75, 0x0d, 0xca, 0xbe, 0xd2, 0x1e, 0x58, 0xa6, 0xd8, 0x9e, 0xe8, 0x0e,
9159
--	0x12, 0x1c, 0xca, 0xb5, 0xf9, 0x89, 0x88, 0x3f, 0xae, 0xab, 0xd5, 0x84, 0x0a, 0x6d, 0x11, 0x8a,
9160
--	0x1d, 0xb7, 0x29, 0xee, 0x8c, 0x4f, 0xc9, 0xd1, 0xbe, 0xbb, 0x5a, 0x3d, 0x3a, 0xa8, 0x3c, 0x99,
9161
--	0xa7, 0xd2, 0xa5, 0x97, 0x55, 0x34, 0x7f, 0x77, 0xb5, 0x8a, 0x69, 0x65, 0xb4, 0x00, 0x53, 0x52,
9162
--	0x6b, 0x7d, 0x8f, 0x72, 0x50, 0x81, 0x2f, 0xae, 0x16, 0xa5, 0x1b, 0xc3, 0x26, 0x18, 0xa7, 0xf1,
9163
--	0x51, 0x15, 0xa6, 0x77, 0x3a, 0x9b, 0xc4, 0x23, 0x31, 0xff, 0xe0, 0x5b, 0x84, 0x6b, 0x8e, 0xca,
9164
--	0x89, 0x68, 0x79, 0x2b, 0x05, 0xc7, 0x5d, 0x35, 0xec, 0x3f, 0x63, 0x47, 0xbc, 0x18, 0xbd, 0x5a,
9165
--	0x18, 0xd0, 0x85, 0x45, 0xa9, 0x7f, 0x98, 0xcb, 0x79, 0x90, 0x55, 0x71, 0x8b, 0xec, 0x6f, 0x04,
9166
--	0x94, 0xd9, 0xce, 0x5e, 0x15, 0xc6, 0x9a, 0x2f, 0xf5, 0x5c, 0xf3, 0xbf, 0x54, 0x80, 0x73, 0x6a,
9167
--	0x04, 0x0c, 0xbe, 0xee, 0xcf, 0xfb, 0x18, 0xbc, 0x00, 0x63, 0x4d, 0xb2, 0xe5, 0x74, 0xbc, 0x58,
9168
--	0xa9, 0x31, 0x87, 0xb8, 0x2a, 0xbb, 0x9a, 0x14, 0x63, 0x1d, 0xe7, 0x18, 0xc3, 0xf6, 0xd3, 0x63,
9169
--	0xec, 0x6e, 0x8d, 0x1d, 0xba, 0xc6, 0xd5, 0xae, 0xb1, 0x72, 0x77, 0xcd, 0x53, 0x30, 0xe4, 0xee,
9170
--	0x52, 0x5e, 0xab, 0x60, 0xb2, 0x50, 0xab, 0xb4, 0x10, 0x73, 0x18, 0xfa, 0x04, 0x8c, 0x34, 0x82,
9171
--	0xdd, 0x5d, 0xc7, 0x6f, 0xb2, 0x2b, 0xaf, 0xbc, 0x38, 0x46, 0xd9, 0xb1, 0x25, 0x5e, 0x84, 0x25,
9172
--	0x0c, 0x3d, 0x01, 0x25, 0x27, 0x6c, 0x45, 0xb3, 0x25, 0x86, 0x33, 0x4a, 0x5b, 0x5a, 0x08, 0x5b,
9173
--	0x11, 0x66, 0xa5, 0x54, 0xaa, 0xba, 0x1f, 0x84, 0x3b, 0xae, 0xdf, 0xaa, 0xba, 0xa1, 0xd8, 0x12,
9174
--	0xea, 0x2e, 0x7c, 0x4b, 0x41, 0xb0, 0x86, 0x85, 0x56, 0x60, 0xa8, 0x1d, 0x84, 0x71, 0x34, 0x3b,
9175
--	0xcc, 0x86, 0xfb, 0xc9, 0x9c, 0x83, 0x88, 0x7f, 0x6d, 0x2d, 0x08, 0xe3, 0xe4, 0x03, 0xe8, 0xbf,
9176
--	0x08, 0xf3, 0xea, 0xe8, 0xdb, 0xa0, 0x48, 0xfc, 0xbd, 0xd9, 0x11, 0x46, 0x65, 0x2e, 0x8b, 0xca,
9177
--	0xb2, 0xbf, 0x77, 0xcf, 0x09, 0x93, 0x53, 0x7a, 0xd9, 0xdf, 0xc3, 0xb4, 0x0e, 0xfa, 0x02, 0x94,
9178
--	0xe5, 0x16, 0x8f, 0x84, 0x9a, 0x23, 0x73, 0x89, 0xc9, 0x83, 0x01, 0x93, 0xf7, 0x3a, 0x6e, 0x48,
9179
--	0x76, 0x89, 0x1f, 0x47, 0xc9, 0x99, 0x26, 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0x2f, 0x48, 0xdd, 0xda,
9180
--	0x5a, 0xd0, 0xf1, 0xe3, 0x68, 0xb6, 0xcc, 0xba, 0x97, 0xf9, 0xea, 0x71, 0x2f, 0xc1, 0x4b, 0x2b,
9181
--	0xdf, 0x78, 0x65, 0x6c, 0x90, 0x42, 0x18, 0x26, 0x3c, 0x77, 0x8f, 0xf8, 0x24, 0x8a, 0x6a, 0x61,
9182
--	0xb0, 0x49, 0x66, 0x81, 0xf5, 0xfc, 0x42, 0xf6, 0x63, 0x40, 0xb0, 0x49, 0x16, 0x67, 0x0e, 0x0f,
9183
--	0x2a, 0x13, 0xb7, 0xf5, 0x3a, 0xd8, 0x24, 0x81, 0xee, 0xc2, 0x24, 0x95, 0x6b, 0xdc, 0x84, 0xe8,
9184
--	0x58, 0x3f, 0xa2, 0x4c, 0xfa, 0xc0, 0x46, 0x25, 0x9c, 0x22, 0x82, 0xde, 0x80, 0xb2, 0xe7, 0x6e,
9185
--	0x91, 0xc6, 0x7e, 0xc3, 0x23, 0xb3, 0xe3, 0x8c, 0x62, 0xe6, 0xb6, 0xba, 0x2d, 0x91, 0xb8, 0x5c,
9186
--	0xa4, 0xfe, 0xe2, 0xa4, 0x3a, 0xba, 0x07, 0xe7, 0x63, 0x12, 0xee, 0xba, 0xbe, 0x43, 0xb7, 0x83,
9187
--	0x90, 0x17, 0xd8, 0x93, 0xca, 0x04, 0x5b, 0x6f, 0x97, 0xc4, 0xd0, 0x9d, 0xdf, 0xc8, 0xc4, 0xc2,
9188
--	0x39, 0xb5, 0xd1, 0x1d, 0x98, 0x62, 0x3b, 0xa1, 0xd6, 0xf1, 0xbc, 0x5a, 0xe0, 0xb9, 0x8d, 0xfd,
9189
--	0xd9, 0x49, 0x46, 0xf0, 0x13, 0xf2, 0x5e, 0x58, 0x35, 0xc1, 0x47, 0x07, 0x15, 0x48, 0xfe, 0xe1,
9190
--	0x74, 0x6d, 0xb4, 0xc9, 0x74, 0xe8, 0x9d, 0xd0, 0x8d, 0xf7, 0xe9, 0xfa, 0x25, 0x0f, 0xe2, 0xd9,
9191
--	0xa9, 0x9e, 0xa2, 0xb0, 0x8e, 0xaa, 0x14, 0xed, 0x7a, 0x21, 0x4e, 0x13, 0xa4, 0x5b, 0x3b, 0x8a,
9192
--	0x9b, 0xae, 0x3f, 0x3b, 0xcd, 0x4e, 0x0c, 0xb5, 0x33, 0xea, 0xb4, 0x10, 0x73, 0x18, 0xd3, 0x9f,
9193
--	0xd3, 0x1f, 0x77, 0xe8, 0x09, 0x3a, 0xc3, 0x10, 0x13, 0xfd, 0xb9, 0x04, 0xe0, 0x04, 0x87, 0x32,
9194
--	0x35, 0x71, 0xbc, 0x3f, 0x8b, 0x18, 0xaa, 0xda, 0x2e, 0x1b, 0x1b, 0x5f, 0xc0, 0xb4, 0x1c, 0xdd,
9195
--	0x86, 0x11, 0xe2, 0xef, 0xad, 0x84, 0xc1, 0xee, 0xec, 0x99, 0xfc, 0x3d, 0xbb, 0xcc, 0x51, 0xf8,
9196
--	0x81, 0x9e, 0x08, 0x78, 0xa2, 0x18, 0x4b, 0x12, 0xe8, 0x01, 0xcc, 0x66, 0xcc, 0x08, 0x9f, 0x80,
9197
--	0xb3, 0x6c, 0x02, 0x3e, 0x2b, 0xea, 0xce, 0x6e, 0xe4, 0xe0, 0x1d, 0xf5, 0x80, 0xe1, 0x5c, 0xea,
9198
--	0xe8, 0x8b, 0x30, 0xc1, 0x37, 0x14, 0x7f, 0x7c, 0x8b, 0x66, 0xcf, 0xb1, 0xaf, 0xb9, 0x9c, 0xbf,
9199
--	0x39, 0x39, 0xe2, 0xe2, 0x39, 0xd1, 0xa1, 0x09, 0xbd, 0x34, 0xc2, 0x26, 0x35, 0x7b, 0x13, 0x26,
9200
--	0xd5, 0xb9, 0xc5, 0x96, 0x0e, 0xaa, 0xc0, 0x10, 0xe3, 0x76, 0x84, 0x7e, 0xab, 0x4c, 0x67, 0x8a,
9201
--	0x71, 0x42, 0x98, 0x97, 0xb3, 0x99, 0x72, 0xdf, 0x27, 0x8b, 0xfb, 0x31, 0xe1, 0x52, 0x75, 0x51,
9202
--	0x9b, 0x29, 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0x7f, 0x39, 0xd7, 0x98, 0x1c, 0x8e, 0x03, 0x5c, 0x07,
9203
--	0xcf, 0xc1, 0xe8, 0x76, 0x10, 0xc5, 0x14, 0x9b, 0xb5, 0x31, 0x94, 0xf0, 0x89, 0x37, 0x45, 0x39,
9204
--	0x56, 0x18, 0xe8, 0x35, 0x98, 0x68, 0xe8, 0x0d, 0x88, 0xbb, 0x4c, 0x0d, 0x81, 0xd1, 0x3a, 0x36,
9205
--	0x71, 0xd1, 0xab, 0x30, 0xca, 0x9e, 0xce, 0x1b, 0x81, 0x27, 0x98, 0x2c, 0x79, 0x21, 0x8f, 0xd6,
9206
--	0x44, 0xf9, 0x91, 0xf6, 0x1b, 0x2b, 0x6c, 0x74, 0x05, 0x86, 0x69, 0x17, 0x56, 0x6b, 0xe2, 0x16,
9207
--	0x51, 0xaa, 0x9a, 0x9b, 0xac, 0x14, 0x0b, 0xa8, 0xfd, 0xd7, 0x0b, 0xda, 0x28, 0x53, 0x89, 0x94,
9208
--	0xa0, 0x1a, 0x8c, 0xdc, 0x77, 0xdc, 0xd8, 0xf5, 0x5b, 0x82, 0x5d, 0x78, 0xa6, 0xe7, 0x95, 0xc2,
9209
--	0x2a, 0xbd, 0xc5, 0x2b, 0xf0, 0x4b, 0x4f, 0xfc, 0xc1, 0x92, 0x0c, 0xa5, 0x18, 0x76, 0x7c, 0x9f,
9210
--	0x52, 0x2c, 0x0c, 0x4a, 0x11, 0xf3, 0x0a, 0x9c, 0xa2, 0xf8, 0x83, 0x25, 0x19, 0xf4, 0x0e, 0x80,
9211
--	0x5c, 0x96, 0xa4, 0x29, 0x9e, 0xac, 0x9f, 0xeb, 0x4f, 0x74, 0x43, 0xd5, 0x59, 0x9c, 0xa4, 0x57,
9212
--	0x6a, 0xf2, 0x1f, 0x6b, 0xf4, 0xec, 0x98, 0xb1, 0x55, 0xdd, 0x9d, 0x41, 0xdf, 0x49, 0x4f, 0x02,
9213
--	0x27, 0x8c, 0x49, 0x73, 0x21, 0x16, 0x83, 0xf3, 0xc9, 0xc1, 0x64, 0x8a, 0x0d, 0x77, 0x97, 0xe8,
9214
--	0xa7, 0x86, 0x20, 0x82, 0x13, 0x7a, 0xf6, 0xaf, 0x14, 0x61, 0x36, 0xaf, 0xbb, 0x74, 0xd1, 0x91,
9215
--	0x07, 0x6e, 0xbc, 0x44, 0xb9, 0x21, 0xcb, 0x5c, 0x74, 0xcb, 0xa2, 0x1c, 0x2b, 0x0c, 0x3a, 0xfb,
9216
--	0x91, 0xdb, 0x92, 0x22, 0xe1, 0x50, 0x32, 0xfb, 0x75, 0x56, 0x8a, 0x05, 0x94, 0xe2, 0x85, 0xc4,
9217
--	0x89, 0x84, 0x4d, 0x84, 0xb6, 0x4a, 0x30, 0x2b, 0xc5, 0x02, 0xaa, 0xeb, 0x9b, 0x4a, 0x7d, 0xf4,
9218
--	0x4d, 0xc6, 0x10, 0x0d, 0x9d, 0xec, 0x10, 0xa1, 0x2f, 0x01, 0x6c, 0xb9, 0xbe, 0x1b, 0x6d, 0x33,
9219
--	0xea, 0xc3, 0xc7, 0xa6, 0xae, 0x78, 0xa9, 0x15, 0x45, 0x05, 0x6b, 0x14, 0xd1, 0xcb, 0x30, 0xa6,
9220
--	0x36, 0xe0, 0x6a, 0x95, 0x3d, 0x10, 0x69, 0x0f, 0xee, 0xc9, 0x69, 0x54, 0xc5, 0x3a, 0x9e, 0xfd,
9221
--	0x6e, 0x7a, 0xbd, 0x88, 0x1d, 0xa0, 0x8d, 0xaf, 0x35, 0xe8, 0xf8, 0x16, 0x7a, 0x8f, 0xaf, 0xfd,
9222
--	0x9b, 0x45, 0x98, 0x32, 0x1a, 0xeb, 0x44, 0x03, 0x9c, 0x59, 0x37, 0xe8, 0x3d, 0xe7, 0xc4, 0x44,
9223
--	0xec, 0x3f, 0xbb, 0xff, 0x56, 0xd1, 0xef, 0x42, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x25, 0x28, 0x7b,
9224
--	0x4e, 0xc4, 0x74, 0x57, 0x44, 0xec, 0xbb, 0x41, 0x88, 0x25, 0x72, 0x84, 0x13, 0xc5, 0xda, 0x55,
9225
--	0xc3, 0x69, 0x27, 0x24, 0xe9, 0x85, 0x4c, 0x79, 0x1f, 0x69, 0x74, 0xa3, 0x3a, 0x41, 0x19, 0xa4,
9226
--	0x7d, 0xcc, 0x61, 0xe8, 0x55, 0x18, 0x0f, 0x09, 0x5b, 0x15, 0x4b, 0x94, 0x95, 0x63, 0xcb, 0x6c,
9227
--	0x28, 0xe1, 0xf9, 0xb0, 0x06, 0xc3, 0x06, 0x66, 0xc2, 0xca, 0x0f, 0xf7, 0x60, 0xe5, 0x9f, 0x81,
9228
--	0x11, 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0xab, 0xbc, 0x18, 0x4b, 0x78, 0x7a, 0xc1, 0x8c, 0x0e,
9229
--	0xb8, 0x60, 0x3e, 0x09, 0x93, 0x55, 0x87, 0xec, 0x06, 0xfe, 0xb2, 0xdf, 0x6c, 0x07, 0xae, 0x1f,
9230
--	0xa3, 0x59, 0x28, 0xb1, 0xdb, 0x81, 0xef, 0xed, 0x12, 0xa5, 0x80, 0x4b, 0x94, 0x31, 0xb7, 0x5b,
9231
--	0x70, 0xae, 0x1a, 0xdc, 0xf7, 0xef, 0x3b, 0x61, 0x73, 0xa1, 0xb6, 0xaa, 0xc9, 0xb9, 0xeb, 0x52,
9232
--	0xce, 0xe2, 0x46, 0x2c, 0x99, 0x67, 0xaa, 0x56, 0x93, 0xdf, 0xb5, 0x2b, 0xae, 0x47, 0x72, 0xb4,
9233
--	0x11, 0x7f, 0xb3, 0x60, 0xb4, 0x94, 0xe0, 0xab, 0x07, 0x23, 0x2b, 0xf7, 0xc1, 0xe8, 0x4d, 0x18,
9234
--	0xdd, 0x72, 0x89, 0xd7, 0xc4, 0x64, 0x4b, 0x2c, 0xb1, 0xa7, 0xf3, 0xdf, 0xe5, 0x57, 0x28, 0xa6,
9235
--	0xd4, 0x3e, 0x71, 0x29, 0x6d, 0x45, 0x54, 0xc6, 0x8a, 0x0c, 0xda, 0x81, 0x69, 0x29, 0x06, 0x48,
9236
--	0xa8, 0x58, 0x70, 0xcf, 0xf4, 0x92, 0x2d, 0x4c, 0xe2, 0x67, 0x0f, 0x0f, 0x2a, 0xd3, 0x38, 0x45,
9237
--	0x06, 0x77, 0x11, 0xa6, 0x62, 0xd9, 0x2e, 0x3d, 0x5a, 0x4b, 0x6c, 0xf8, 0x99, 0x58, 0xc6, 0x24,
9238
--	0x4c, 0x56, 0x6a, 0xff, 0x84, 0x05, 0x8f, 0x75, 0x8d, 0x8c, 0x90, 0xb4, 0x4f, 0x78, 0x16, 0xd2,
9239
--	0x92, 0x6f, 0xa1, 0xbf, 0xe4, 0x6b, 0xff, 0x03, 0x0b, 0xce, 0x2e, 0xef, 0xb6, 0xe3, 0xfd, 0xaa,
9240
--	0x6b, 0xbe, 0xee, 0xbc, 0x02, 0xc3, 0xbb, 0xa4, 0xe9, 0x76, 0x76, 0xc5, 0xcc, 0x55, 0xe4, 0xf1,
9241
--	0xb3, 0xc6, 0x4a, 0x8f, 0x0e, 0x2a, 0x13, 0xf5, 0x38, 0x08, 0x9d, 0x16, 0xe1, 0x05, 0x58, 0xa0,
9242
--	0xb3, 0x43, 0xdc, 0x7d, 0x9f, 0xdc, 0x76, 0x77, 0x5d, 0x69, 0x67, 0xd1, 0x53, 0x77, 0x36, 0x2f,
9243
--	0x07, 0x74, 0xfe, 0xcd, 0x8e, 0xe3, 0xc7, 0x6e, 0xbc, 0x2f, 0x1e, 0x66, 0x24, 0x11, 0x9c, 0xd0,
9244
--	0xb3, 0xbf, 0x69, 0xc1, 0x94, 0x5c, 0xf7, 0x0b, 0xcd, 0x66, 0x48, 0xa2, 0x08, 0xcd, 0x41, 0xc1,
9245
--	0x6d, 0x8b, 0x5e, 0x82, 0xe8, 0x65, 0x61, 0xb5, 0x86, 0x0b, 0x6e, 0x1b, 0xd5, 0xa0, 0xcc, 0xcd,
9246
--	0x35, 0x92, 0xc5, 0x35, 0x90, 0xd1, 0x07, 0xeb, 0xc1, 0x86, 0xac, 0x89, 0x13, 0x22, 0x92, 0x83,
9247
--	0x63, 0x67, 0x66, 0xd1, 0x7c, 0xf5, 0xba, 0x29, 0xca, 0xb1, 0xc2, 0x40, 0x57, 0x61, 0xd4, 0x0f,
9248
--	0x9a, 0xdc, 0x7a, 0x86, 0xdf, 0x7e, 0x6c, 0xc9, 0xae, 0x8b, 0x32, 0xac, 0xa0, 0xf6, 0x0f, 0x5b,
9249
--	0x30, 0x2e, 0xbf, 0x6c, 0x40, 0x66, 0x92, 0x6e, 0xad, 0x84, 0x91, 0x4c, 0xb6, 0x16, 0x65, 0x06,
9250
--	0x19, 0xc4, 0xe0, 0x01, 0x8b, 0xc7, 0xe1, 0x01, 0xed, 0x1f, 0x2f, 0xc0, 0xa4, 0xec, 0x4e, 0xbd,
9251
--	0xb3, 0x19, 0x91, 0x18, 0x6d, 0x40, 0xd9, 0xe1, 0x43, 0x4e, 0xe4, 0x8a, 0x7d, 0x2a, 0x5b, 0xf8,
9252
--	0x30, 0xe6, 0x27, 0xb9, 0x96, 0x17, 0x64, 0x6d, 0x9c, 0x10, 0x42, 0x1e, 0xcc, 0xf8, 0x41, 0xcc,
9253
--	0x8e, 0x68, 0x05, 0xef, 0xf5, 0x04, 0x92, 0xa6, 0x7e, 0x41, 0x50, 0x9f, 0x59, 0x4f, 0x53, 0xc1,
9254
--	0xdd, 0x84, 0xd1, 0xb2, 0x54, 0x78, 0x14, 0xf3, 0xc5, 0x0d, 0x7d, 0x16, 0xb2, 0xf5, 0x1d, 0xf6,
9255
--	0xaf, 0x59, 0x50, 0x96, 0x68, 0xa7, 0xf1, 0xda, 0xb5, 0x06, 0x23, 0x11, 0x9b, 0x04, 0x39, 0x34,
9256
--	0x76, 0xaf, 0x8e, 0xf3, 0xf9, 0x4a, 0x6e, 0x1e, 0xfe, 0x3f, 0xc2, 0x92, 0x06, 0xd3, 0x77, 0xab,
9257
--	0xee, 0x7f, 0x44, 0xf4, 0xdd, 0xaa, 0x3f, 0x39, 0x37, 0xcc, 0x7f, 0x65, 0x7d, 0xd6, 0xc4, 0x5a,
9258
--	0xca, 0x20, 0xb5, 0x43, 0xb2, 0xe5, 0x3e, 0x48, 0x33, 0x48, 0x35, 0x56, 0x8a, 0x05, 0x14, 0xbd,
9259
--	0x03, 0xe3, 0x0d, 0xa9, 0xe8, 0x4c, 0x8e, 0x81, 0x2b, 0x3d, 0x95, 0xee, 0xea, 0x7d, 0x86, 0x5b,
9260
--	0xd6, 0x2e, 0x69, 0xf5, 0xb1, 0x41, 0xcd, 0x7c, 0x6e, 0x2f, 0xf6, 0x7b, 0x6e, 0x4f, 0xe8, 0xe6,
9261
--	0x3f, 0x3e, 0xff, 0xa4, 0x05, 0xc3, 0x5c, 0x5d, 0x36, 0x98, 0x7e, 0x51, 0x7b, 0xae, 0x4a, 0xc6,
9262
--	0xee, 0x1e, 0x2d, 0x14, 0xcf, 0x4f, 0x68, 0x0d, 0xca, 0xec, 0x07, 0x53, 0x1b, 0x14, 0xf3, 0x4d,
9263
--	0x8a, 0x79, 0xab, 0x7a, 0x07, 0xef, 0xc9, 0x6a, 0x38, 0xa1, 0x60, 0xff, 0x68, 0x91, 0x1e, 0x55,
9264
--	0x09, 0xaa, 0x71, 0x83, 0x5b, 0x8f, 0xee, 0x06, 0x2f, 0x3c, 0xaa, 0x1b, 0xbc, 0x05, 0x53, 0x0d,
9265
--	0xed, 0x71, 0x2b, 0x99, 0xc9, 0xab, 0x3d, 0x17, 0x89, 0xf6, 0x0e, 0xc6, 0x55, 0x46, 0x4b, 0x26,
9266
--	0x11, 0x9c, 0xa6, 0x8a, 0xbe, 0x13, 0xc6, 0xf9, 0x3c, 0x8b, 0x56, 0xb8, 0xc5, 0xc2, 0x27, 0xf2,
9267
--	0xd7, 0x8b, 0xde, 0x04, 0x5b, 0x89, 0x75, 0xad, 0x3a, 0x36, 0x88, 0xd9, 0xbf, 0x32, 0x0a, 0x43,
9268
--	0xcb, 0x7b, 0xc4, 0x8f, 0x4f, 0xe1, 0x40, 0x6a, 0xc0, 0xa4, 0xeb, 0xef, 0x05, 0xde, 0x1e, 0x69,
9269
--	0x72, 0xf8, 0x71, 0x2e, 0xd7, 0xf3, 0x82, 0xf4, 0xe4, 0xaa, 0x41, 0x02, 0xa7, 0x48, 0x3e, 0x0a,
9270
--	0x09, 0xf3, 0x06, 0x0c, 0xf3, 0xb9, 0x17, 0xe2, 0x65, 0xa6, 0x32, 0x98, 0x0d, 0xa2, 0xd8, 0x05,
9271
--	0x89, 0xf4, 0xcb, 0xb5, 0xcf, 0xa2, 0x3a, 0x7a, 0x17, 0x26, 0xb7, 0xdc, 0x30, 0x8a, 0xa9, 0x68,
9272
--	0x18, 0xc5, 0xce, 0x6e, 0xfb, 0x21, 0x24, 0x4a, 0x35, 0x0e, 0x2b, 0x06, 0x25, 0x9c, 0xa2, 0x8c,
9273
--	0x5a, 0x30, 0x41, 0x85, 0x9c, 0xa4, 0xa9, 0x91, 0x63, 0x37, 0xa5, 0x54, 0x46, 0xb7, 0x75, 0x42,
9274
--	0xd8, 0xa4, 0x4b, 0x0f, 0x93, 0x06, 0x13, 0x8a, 0x46, 0x19, 0x47, 0xa1, 0x0e, 0x13, 0x2e, 0x0d,
9275
--	0x71, 0x18, 0x3d, 0x93, 0x98, 0xd9, 0x4a, 0xd9, 0x3c, 0x93, 0x34, 0xe3, 0x94, 0x2f, 0x43, 0x99,
9276
--	0xd0, 0x21, 0xa4, 0x84, 0x85, 0x62, 0xfc, 0xda, 0x60, 0x7d, 0x5d, 0x73, 0x1b, 0x61, 0x60, 0xca,
9277
--	0xf2, 0xcb, 0x92, 0x12, 0x4e, 0x88, 0xa2, 0x25, 0x18, 0x8e, 0x48, 0xe8, 0x92, 0x48, 0xa8, 0xc8,
9278
--	0x7b, 0x4c, 0x23, 0x43, 0xe3, 0xb6, 0xe7, 0xfc, 0x37, 0x16, 0x55, 0xe9, 0xf2, 0x72, 0x98, 0x34,
9279
--	0xc4, 0xb4, 0xe2, 0xda, 0xf2, 0x5a, 0x60, 0xa5, 0x58, 0x40, 0xd1, 0x1b, 0x30, 0x12, 0x12, 0x8f,
9280
--	0x29, 0x8b, 0x26, 0x06, 0x5f, 0xe4, 0x5c, 0xf7, 0xc4, 0xeb, 0x61, 0x49, 0x00, 0xdd, 0x02, 0x14,
9281
--	0x12, 0xca, 0x43, 0xb8, 0x7e, 0x4b, 0x19, 0x73, 0x08, 0x5d, 0xf7, 0xe3, 0xa2, 0xfd, 0x33, 0x38,
9282
--	0xc1, 0x90, 0x56, 0xa9, 0x38, 0xa3, 0x1a, 0xba, 0x01, 0x33, 0xaa, 0x74, 0xd5, 0x8f, 0x62, 0xc7,
9283
--	0x6f, 0x10, 0xa6, 0xe6, 0x2e, 0x27, 0x5c, 0x11, 0x4e, 0x23, 0xe0, 0xee, 0x3a, 0xf6, 0xcf, 0x51,
9284
--	0x76, 0x86, 0x8e, 0xd6, 0x29, 0xf0, 0x02, 0xaf, 0x9b, 0xbc, 0xc0, 0x85, 0xdc, 0x99, 0xcb, 0xe1,
9285
--	0x03, 0x0e, 0x2d, 0x18, 0xd3, 0x66, 0x36, 0x59, 0xb3, 0x56, 0x8f, 0x35, 0xdb, 0x81, 0x69, 0xba,
9286
--	0xd2, 0xef, 0x6c, 0x46, 0x24, 0xdc, 0x23, 0x4d, 0xb6, 0x30, 0x0b, 0x0f, 0xb7, 0x30, 0xd5, 0x2b,
9287
--	0xf3, 0xed, 0x14, 0x41, 0xdc, 0xd5, 0x04, 0x7a, 0x45, 0x6a, 0x4e, 0x8a, 0x86, 0x91, 0x16, 0xd7,
9288
--	0x8a, 0x1c, 0x1d, 0x54, 0xa6, 0xb5, 0x0f, 0xd1, 0x35, 0x25, 0xf6, 0x97, 0xe5, 0x37, 0xaa, 0xd7,
9289
--	0xfc, 0x86, 0x5a, 0x2c, 0xa9, 0xd7, 0x7c, 0xb5, 0x1c, 0x70, 0x82, 0x43, 0xf7, 0x28, 0x15, 0x41,
9290
--	0xd2, 0xaf, 0xf9, 0x54, 0x40, 0xc1, 0x0c, 0x62, 0xbf, 0x08, 0xb0, 0xfc, 0x80, 0x34, 0xf8, 0x52,
9291
--	0xd7, 0x1f, 0x20, 0xad, 0xfc, 0x07, 0x48, 0xfb, 0xdf, 0x5b, 0x30, 0xb9, 0xb2, 0x64, 0x88, 0x89,
9292
--	0xf3, 0x00, 0x5c, 0x36, 0x7a, 0xeb, 0xad, 0x75, 0xa9, 0x5b, 0xe7, 0xea, 0x51, 0x55, 0x8a, 0x35,
9293
--	0x0c, 0x74, 0x01, 0x8a, 0x5e, 0xc7, 0x17, 0x22, 0xcb, 0xc8, 0xe1, 0x41, 0xa5, 0x78, 0xbb, 0xe3,
9294
--	0x63, 0x5a, 0xa6, 0x59, 0x08, 0x16, 0x07, 0xb6, 0x10, 0xec, 0xeb, 0x5e, 0x85, 0x2a, 0x30, 0x74,
9295
--	0xff, 0xbe, 0xdb, 0xe4, 0x46, 0xec, 0x42, 0xef, 0xff, 0xd6, 0x5b, 0xab, 0xd5, 0x08, 0xf3, 0x72,
9296
--	0xfb, 0xab, 0x45, 0x98, 0x5b, 0xf1, 0xc8, 0x83, 0x0f, 0x68, 0xc8, 0x3f, 0xa8, 0x7d, 0xe3, 0xf1,
9297
--	0xf8, 0xc5, 0xe3, 0xda, 0xb0, 0xf6, 0x1f, 0x8f, 0x2d, 0x18, 0xe1, 0x8f, 0xd9, 0xd2, 0xac, 0xff,
9298
--	0xb5, 0xac, 0xd6, 0xf3, 0x07, 0x64, 0x9e, 0x3f, 0x8a, 0x0b, 0x73, 0x7e, 0x75, 0xd3, 0x8a, 0x52,
9299
--	0x2c, 0x89, 0xcf, 0x7d, 0x06, 0xc6, 0x75, 0xcc, 0x63, 0x59, 0x93, 0xff, 0xa5, 0x22, 0x4c, 0xd3,
9300
--	0x1e, 0x3c, 0xd2, 0x89, 0xb8, 0xdb, 0x3d, 0x11, 0x27, 0x6d, 0x51, 0xdc, 0x7f, 0x36, 0xde, 0x49,
9301
--	0xcf, 0xc6, 0x0b, 0x79, 0xb3, 0x71, 0xda, 0x73, 0xf0, 0xbd, 0x16, 0x9c, 0x59, 0xf1, 0x82, 0xc6,
9302
--	0x4e, 0xca, 0xea, 0xf7, 0x65, 0x18, 0xa3, 0xe7, 0x78, 0x64, 0x78, 0x11, 0x19, 0x7e, 0x65, 0x02,
9303
--	0x84, 0x75, 0x3c, 0xad, 0xda, 0xdd, 0xbb, 0xab, 0xd5, 0x2c, 0x77, 0x34, 0x01, 0xc2, 0x3a, 0x9e,
9304
--	0xfd, 0x0d, 0x0b, 0x2e, 0xde, 0x58, 0x5a, 0x4e, 0x96, 0x62, 0x97, 0x47, 0x1c, 0x95, 0x02, 0x9b,
9305
--	0x5a, 0x57, 0x12, 0x29, 0xb0, 0xca, 0x7a, 0x21, 0xa0, 0x1f, 0x15, 0x6f, 0xcf, 0x9f, 0xb5, 0xe0,
9306
--	0xcc, 0x0d, 0x37, 0xa6, 0xd7, 0x72, 0xda, 0x37, 0x8b, 0xde, 0xcb, 0x91, 0x1b, 0x07, 0xe1, 0x7e,
9307
--	0xda, 0x37, 0x0b, 0x2b, 0x08, 0xd6, 0xb0, 0x78, 0xcb, 0x7b, 0x2e, 0x33, 0xa3, 0x2a, 0x98, 0xaa,
9308
--	0x28, 0x2c, 0xca, 0xb1, 0xc2, 0xa0, 0x1f, 0xd6, 0x74, 0x43, 0x26, 0x4a, 0xec, 0x8b, 0x13, 0x56,
9309
--	0x7d, 0x58, 0x55, 0x02, 0x70, 0x82, 0x63, 0xff, 0x84, 0x05, 0xe7, 0x6e, 0x78, 0x9d, 0x28, 0x26,
9310
--	0xe1, 0x56, 0x64, 0x74, 0xf6, 0x45, 0x28, 0x13, 0x29, 0xae, 0x8b, 0xbe, 0x2a, 0x06, 0x53, 0xc9,
9311
--	0xf1, 0xdc, 0x31, 0x4c, 0xe1, 0x0d, 0xe0, 0x39, 0x70, 0x3c, 0xd7, 0xb1, 0x5f, 0x2c, 0xc0, 0xc4,
9312
--	0xcd, 0x8d, 0x8d, 0xda, 0x0d, 0x12, 0x8b, 0x5b, 0xac, 0xbf, 0xaa, 0x19, 0x6b, 0x1a, 0xb3, 0x5e,
9313
--	0x42, 0x51, 0x27, 0x76, 0xbd, 0x79, 0xee, 0x89, 0x3c, 0xbf, 0xea, 0xc7, 0x77, 0xc2, 0x7a, 0x1c,
9314
--	0xba, 0x7e, 0x2b, 0x53, 0xc7, 0x26, 0xef, 0xda, 0x62, 0xde, 0x5d, 0x8b, 0x5e, 0x84, 0x61, 0xe6,
9315
--	0x0a, 0x2d, 0xc5, 0x93, 0xc7, 0x95, 0x4c, 0xc1, 0x4a, 0x8f, 0x0e, 0x2a, 0xe5, 0xbb, 0x78, 0x95,
9316
--	0xff, 0xc1, 0x02, 0x15, 0xdd, 0x85, 0xb1, 0xed, 0x38, 0x6e, 0xdf, 0x24, 0x4e, 0x93, 0x84, 0xf2,
9317
--	0x74, 0xb8, 0x94, 0x75, 0x3a, 0xd0, 0x41, 0xe0, 0x68, 0xc9, 0x86, 0x4a, 0xca, 0x22, 0xac, 0xd3,
9318
--	0xb1, 0xeb, 0x00, 0x09, 0xec, 0x84, 0xf4, 0x0b, 0xf6, 0x1f, 0x58, 0x30, 0xc2, 0xbd, 0xd2, 0x42,
9319
--	0xf4, 0x59, 0x28, 0x91, 0x07, 0xa4, 0x21, 0x38, 0xc7, 0xcc, 0x0e, 0x27, 0x8c, 0x07, 0xd7, 0x96,
9320
--	0xd3, 0xff, 0x98, 0xd5, 0x42, 0x37, 0x61, 0x84, 0xf6, 0xf6, 0x86, 0x72, 0xd1, 0x7b, 0x32, 0xef,
9321
--	0x8b, 0xd5, 0xb4, 0x73, 0x5e, 0x45, 0x14, 0x61, 0x59, 0x9d, 0x69, 0x7e, 0x1b, 0xed, 0x3a, 0x3d,
9322
--	0xc0, 0xe2, 0x5e, 0xf7, 0xec, 0xc6, 0x52, 0x8d, 0x23, 0x09, 0x6a, 0x5c, 0xf3, 0x2b, 0x0b, 0x71,
9323
--	0x42, 0xc4, 0xde, 0x80, 0x32, 0x9d, 0xd4, 0x05, 0xcf, 0x75, 0x7a, 0x2b, 0x9d, 0x9f, 0x85, 0xb2,
9324
--	0x54, 0x00, 0x47, 0xc2, 0xb1, 0x89, 0x51, 0x95, 0xfa, 0xe1, 0x08, 0x27, 0x70, 0x7b, 0x0b, 0xce,
9325
--	0xb2, 0x97, 0x7f, 0x27, 0xde, 0x36, 0xf6, 0x58, 0xff, 0xc5, 0xfc, 0x9c, 0x10, 0xc4, 0xf8, 0xcc,
9326
--	0xcc, 0x6a, 0xbe, 0x03, 0xe3, 0x92, 0x62, 0x22, 0x94, 0xd9, 0x7f, 0x54, 0x82, 0xc7, 0x57, 0xeb,
9327
--	0xf9, 0x0e, 0x8b, 0xaf, 0xc2, 0x38, 0x67, 0xd3, 0xe8, 0xd2, 0x76, 0x3c, 0xd1, 0xae, 0x7a, 0x17,
9328
--	0xdb, 0xd0, 0x60, 0xd8, 0xc0, 0x44, 0x17, 0xa1, 0xe8, 0xbe, 0xe7, 0xa7, 0xcd, 0x70, 0x57, 0xdf,
9329
--	0x5c, 0xc7, 0xb4, 0x9c, 0x82, 0x29, 0xc7, 0xc7, 0x8f, 0x52, 0x05, 0x56, 0x5c, 0xdf, 0xeb, 0x30,
9330
--	0xe9, 0x46, 0x8d, 0xc8, 0x5d, 0xf5, 0xe9, 0x39, 0x93, 0x38, 0xbb, 0x26, 0x4a, 0x02, 0xda, 0x69,
9331
--	0x05, 0xc5, 0x29, 0x6c, 0xed, 0x5c, 0x1f, 0x1a, 0x98, 0x6b, 0xec, 0xeb, 0xe9, 0x43, 0x19, 0xe2,
9332
--	0x36, 0xfb, 0xba, 0x88, 0x19, 0xb5, 0x09, 0x86, 0x98, 0x7f, 0x70, 0x84, 0x25, 0x8c, 0x4a, 0x60,
9333
--	0x8d, 0x6d, 0xa7, 0xbd, 0xd0, 0x89, 0xb7, 0xab, 0x6e, 0xd4, 0x08, 0xf6, 0x48, 0xb8, 0xcf, 0x84,
9334
--	0xe7, 0xd1, 0x44, 0x02, 0x53, 0x80, 0xa5, 0x9b, 0x0b, 0x35, 0x8a, 0x89, 0xbb, 0xeb, 0x98, 0x5c,
9335
--	0x21, 0x9c, 0x04, 0x57, 0xb8, 0x00, 0x53, 0xb2, 0x99, 0x3a, 0x89, 0xd8, 0x1d, 0x31, 0xc6, 0x3a,
9336
--	0xa6, 0x4c, 0x6d, 0x45, 0xb1, 0xea, 0x56, 0x1a, 0x1f, 0xbd, 0x02, 0x13, 0xae, 0xef, 0xc6, 0xae,
9337
--	0x13, 0x07, 0x21, 0xbb, 0x61, 0xb9, 0x9c, 0xcc, 0x2c, 0xd9, 0x56, 0x75, 0x00, 0x36, 0xf1, 0xec,
9338
--	0x3f, 0x2c, 0xc1, 0x0c, 0x9b, 0xb6, 0x6f, 0xad, 0xb0, 0x8f, 0xcc, 0x0a, 0xbb, 0xdb, 0xbd, 0xc2,
9339
--	0x4e, 0x82, 0xdd, 0xfd, 0x30, 0x97, 0xd9, 0xbb, 0x50, 0x56, 0xb6, 0xc0, 0xd2, 0x19, 0xc0, 0xca,
9340
--	0x71, 0x06, 0xe8, 0xcf, 0x7d, 0xc8, 0x67, 0xdc, 0x62, 0xe6, 0x33, 0xee, 0xdf, 0xb6, 0x20, 0x31,
9341
--	0x89, 0x44, 0x37, 0xa1, 0xdc, 0x0e, 0x98, 0xd9, 0x41, 0x28, 0x6d, 0x79, 0x1e, 0xcf, 0xbc, 0xa8,
9342
--	0xf8, 0xa5, 0xc8, 0xc7, 0xaf, 0x26, 0x6b, 0xe0, 0xa4, 0x32, 0x5a, 0x84, 0x91, 0x76, 0x48, 0xea,
9343
--	0x31, 0x73, 0x81, 0xed, 0x4b, 0x87, 0xaf, 0x11, 0x8e, 0x8f, 0x65, 0x45, 0xfb, 0x97, 0x2c, 0x00,
9344
--	0xfe, 0x52, 0xea, 0xf8, 0x2d, 0x72, 0x0a, 0xda, 0xdf, 0x2a, 0x94, 0xa2, 0x36, 0x69, 0xf4, 0x32,
9345
--	0x08, 0x49, 0xfa, 0x53, 0x6f, 0x93, 0x46, 0x32, 0xe0, 0xf4, 0x1f, 0x66, 0xb5, 0xed, 0xef, 0x03,
9346
--	0x98, 0x4c, 0xd0, 0x56, 0x63, 0xb2, 0x8b, 0x9e, 0x37, 0x5c, 0xe2, 0x2e, 0xa4, 0x5c, 0xe2, 0xca,
9347
--	0x0c, 0x5b, 0x53, 0x34, 0xbe, 0x0b, 0xc5, 0x5d, 0xe7, 0x81, 0xd0, 0x24, 0x3d, 0xdb, 0xbb, 0x1b,
9348
--	0x94, 0xfe, 0xfc, 0x9a, 0xf3, 0x80, 0xcb, 0x4c, 0xcf, 0xca, 0x05, 0xb2, 0xe6, 0x3c, 0x38, 0xe2,
9349
--	0x66, 0x1f, 0xec, 0x90, 0xba, 0xed, 0x46, 0xf1, 0x57, 0xfe, 0x53, 0xf2, 0x9f, 0x2d, 0x3b, 0xda,
9350
--	0x08, 0x6b, 0xcb, 0xf5, 0xc5, 0xbb, 0xe1, 0x40, 0x6d, 0xb9, 0x7e, 0xba, 0x2d, 0xd7, 0x1f, 0xa0,
9351
--	0x2d, 0xd7, 0x47, 0xef, 0xc3, 0x88, 0x78, 0xa3, 0x67, 0xb6, 0xde, 0xa6, 0x96, 0x2a, 0xaf, 0x3d,
9352
--	0xf1, 0xc4, 0xcf, 0xdb, 0xbc, 0x26, 0x65, 0x42, 0x51, 0xda, 0xb7, 0x5d, 0xd9, 0x20, 0xfa, 0x1b,
9353
--	0x16, 0x4c, 0x8a, 0xdf, 0x98, 0xbc, 0xd7, 0x21, 0x51, 0x2c, 0x78, 0xcf, 0x4f, 0x0f, 0xde, 0x07,
9354
--	0x51, 0x91, 0x77, 0xe5, 0xd3, 0xf2, 0x98, 0x35, 0x81, 0x7d, 0x7b, 0x94, 0xea, 0x05, 0xfa, 0x47,
9355
--	0x16, 0x9c, 0xdd, 0x75, 0x1e, 0xf0, 0x16, 0x79, 0x19, 0x76, 0x62, 0x37, 0x10, 0xb6, 0xeb, 0x9f,
9356
--	0x1d, 0x6c, 0xfa, 0xbb, 0xaa, 0xf3, 0x4e, 0x4a, 0x33, 0xd7, 0xb3, 0x59, 0x28, 0x7d, 0xbb, 0x9a,
9357
--	0xd9, 0xaf, 0xb9, 0x2d, 0x18, 0x95, 0xeb, 0x2d, 0x43, 0xf2, 0xae, 0xea, 0x8c, 0xf5, 0xb1, 0x4d,
9358
--	0x24, 0x74, 0xbf, 0x34, 0xda, 0x8e, 0x58, 0x6b, 0x8f, 0xb4, 0x9d, 0x77, 0x61, 0x5c, 0x5f, 0x63,
9359
--	0x8f, 0xb4, 0xad, 0xf7, 0xe0, 0x4c, 0xc6, 0x5a, 0x7a, 0xa4, 0x4d, 0xde, 0x87, 0x0b, 0xb9, 0xeb,
9360
--	0xe3, 0x51, 0x36, 0x6c, 0xff, 0xa2, 0xa5, 0x9f, 0x83, 0xa7, 0xa0, 0x82, 0x5f, 0x32, 0x55, 0xf0,
9361
--	0x97, 0x7a, 0xef, 0x9c, 0x1c, 0x3d, 0xfc, 0x3b, 0x7a, 0xa7, 0xe9, 0xa9, 0x8e, 0xde, 0x80, 0x61,
9362
--	0x8f, 0x96, 0x48, 0xe3, 0x10, 0xbb, 0xff, 0x8e, 0x4c, 0x78, 0x29, 0x56, 0x1e, 0x61, 0x41, 0xc1,
9363
--	0xfe, 0x55, 0x0b, 0x4a, 0xa7, 0x30, 0x12, 0xd8, 0x1c, 0x89, 0xe7, 0x73, 0x49, 0x8b, 0x90, 0x66,
9364
--	0xf3, 0xd8, 0xb9, 0xbf, 0xfc, 0x20, 0x26, 0x7e, 0xc4, 0x44, 0xc5, 0xcc, 0x81, 0xf9, 0x2e, 0x38,
9365
--	0x73, 0x3b, 0x70, 0x9a, 0x8b, 0x8e, 0xe7, 0xf8, 0x0d, 0x12, 0xae, 0xfa, 0xad, 0xbe, 0x56, 0x4a,
9366
--	0xba, 0x4d, 0x51, 0xa1, 0x9f, 0x4d, 0x91, 0xbd, 0x0d, 0x48, 0x6f, 0x40, 0xd8, 0x71, 0x62, 0x18,
9367
--	0x71, 0x79, 0x53, 0x62, 0xf8, 0x9f, 0xce, 0xe6, 0xee, 0xba, 0x7a, 0xa6, 0x59, 0x28, 0xf2, 0x02,
9368
--	0x2c, 0x09, 0xd9, 0xaf, 0x42, 0xa6, 0xef, 0x56, 0x7f, 0xb5, 0x81, 0xfd, 0x32, 0xcc, 0xb0, 0x9a,
9369
--	0xc7, 0x13, 0x69, 0xed, 0x1f, 0xb0, 0x60, 0x6a, 0x3d, 0x15, 0x9b, 0xe2, 0x0a, 0x7b, 0xeb, 0xcb,
9370
--	0xd0, 0xfb, 0xd6, 0x59, 0x29, 0x16, 0xd0, 0x13, 0xd7, 0x2f, 0xfd, 0x99, 0x05, 0x89, 0xab, 0xe4,
9371
--	0x29, 0x30, 0x55, 0x4b, 0x06, 0x53, 0x95, 0xa9, 0xf7, 0x50, 0xdd, 0xc9, 0xe3, 0xa9, 0xd0, 0x2d,
9372
--	0x15, 0x17, 0xa0, 0x87, 0xca, 0x23, 0x21, 0xc3, 0xbd, 0xc8, 0x27, 0xcd, 0xe0, 0x01, 0x32, 0x52,
9373
--	0x00, 0x33, 0x13, 0x52, 0xb8, 0x1f, 0x11, 0x33, 0x21, 0xd5, 0x9f, 0x9c, 0xdd, 0x57, 0xd3, 0xba,
9374
--	0xcc, 0x4e, 0xa5, 0x6f, 0x67, 0x66, 0xdf, 0x8e, 0xe7, 0xbe, 0x4f, 0x54, 0x70, 0x93, 0x8a, 0x30,
9375
--	0xe3, 0x16, 0xa5, 0x47, 0x07, 0x95, 0x09, 0xf5, 0x8f, 0x47, 0xc0, 0x4a, 0xaa, 0xd8, 0x37, 0x61,
9376
--	0x2a, 0x35, 0x60, 0xe8, 0x65, 0x18, 0x6a, 0x6f, 0x3b, 0x11, 0x49, 0x99, 0x46, 0x0e, 0xd5, 0x68,
9377
--	0xe1, 0xd1, 0x41, 0x65, 0x52, 0x55, 0x60, 0x25, 0x98, 0x63, 0xdb, 0xff, 0xd3, 0x82, 0xd2, 0x7a,
9378
--	0xd0, 0x3c, 0x8d, 0xc5, 0xf4, 0xba, 0xb1, 0x98, 0x9e, 0xc8, 0x8b, 0x1f, 0x98, 0xbb, 0x8e, 0x56,
9379
--	0x52, 0xeb, 0xe8, 0x52, 0x2e, 0x85, 0xde, 0x4b, 0x68, 0x17, 0xc6, 0x58, 0x54, 0x42, 0x61, 0xaa,
9380
--	0xf9, 0xa2, 0xc1, 0xdf, 0x57, 0x52, 0xfc, 0xfd, 0x94, 0x86, 0xaa, 0x71, 0xf9, 0xcf, 0xc0, 0x88,
9381
--	0x30, 0x17, 0x4c, 0x1b, 0xb8, 0x0b, 0x5c, 0x2c, 0xe1, 0xf6, 0x4f, 0x16, 0xc1, 0x88, 0x82, 0x88,
9382
--	0x7e, 0xcd, 0x82, 0xf9, 0x90, 0x7b, 0x0c, 0x36, 0xab, 0x9d, 0xd0, 0xf5, 0x5b, 0xf5, 0xc6, 0x36,
9383
--	0x69, 0x76, 0x3c, 0xd7, 0x6f, 0xad, 0xb6, 0xfc, 0x40, 0x15, 0x2f, 0x3f, 0x20, 0x8d, 0x0e, 0xd3,
9384
--	0xf9, 0xf7, 0x09, 0xb9, 0xa8, 0xcc, 0x71, 0xae, 0x1f, 0x1e, 0x54, 0xe6, 0xf1, 0xb1, 0x68, 0xe3,
9385
--	0x63, 0xf6, 0x05, 0x7d, 0xc3, 0x82, 0x6b, 0x3c, 0x38, 0xe0, 0xe0, 0xfd, 0xef, 0x21, 0x0d, 0xd5,
9386
--	0x24, 0xa9, 0x84, 0xc8, 0x06, 0x09, 0x77, 0x17, 0x5f, 0x11, 0x03, 0x7a, 0xad, 0x76, 0xbc, 0xb6,
9387
--	0xf0, 0x71, 0x3b, 0x67, 0xff, 0xcb, 0x22, 0x4c, 0x08, 0x67, 0x75, 0x11, 0x05, 0xe5, 0x65, 0x63,
9388
--	0x49, 0x3c, 0x99, 0x5a, 0x12, 0x33, 0x06, 0xf2, 0xc9, 0x04, 0x40, 0x89, 0x60, 0xc6, 0x73, 0xa2,
9389
--	0xf8, 0x26, 0x71, 0xc2, 0x78, 0x93, 0x38, 0xdc, 0x4c, 0xa5, 0x78, 0x6c, 0x93, 0x1a, 0xa5, 0x7e,
9390
--	0xb9, 0x9d, 0x26, 0x86, 0xbb, 0xe9, 0xa3, 0x3d, 0x40, 0xcc, 0xd6, 0x26, 0x74, 0xfc, 0x88, 0x7f,
9391
--	0x8b, 0x2b, 0xde, 0x03, 0x8e, 0xd7, 0xea, 0x9c, 0x68, 0x15, 0xdd, 0xee, 0xa2, 0x86, 0x33, 0x5a,
9392
--	0xd0, 0x6c, 0xa8, 0x86, 0x06, 0xb5, 0xa1, 0x1a, 0xee, 0xe3, 0x45, 0xe2, 0xc3, 0x74, 0x57, 0xbc,
9393
--	0x81, 0xb7, 0xa1, 0xac, 0x6c, 0xdd, 0xc4, 0xa1, 0xd3, 0x3b, 0x6c, 0x47, 0x9a, 0x02, 0x57, 0x91,
9394
--	0x24, 0x76, 0x96, 0x09, 0x39, 0xfb, 0x1f, 0x17, 0x8c, 0x06, 0xf9, 0x24, 0xae, 0xc3, 0xa8, 0x13,
9395
--	0x45, 0x6e, 0xcb, 0x27, 0x4d, 0xb1, 0x63, 0x3f, 0x9e, 0xb7, 0x63, 0x8d, 0x66, 0x98, 0xbd, 0xe1,
9396
--	0x82, 0xa8, 0x89, 0x15, 0x0d, 0x74, 0x93, 0x1b, 0x03, 0xed, 0x49, 0x7e, 0x7e, 0x30, 0x6a, 0x20,
9397
--	0xcd, 0x85, 0xf6, 0x08, 0x16, 0xf5, 0xd1, 0x17, 0xb9, 0xb5, 0xd6, 0x2d, 0x3f, 0xb8, 0xef, 0xdf,
9398
--	0x08, 0x02, 0xe9, 0x61, 0x36, 0x18, 0xc1, 0x19, 0x69, 0xa3, 0xa5, 0xaa, 0x63, 0x93, 0xda, 0x60,
9399
--	0x31, 0x79, 0xbe, 0x1b, 0xce, 0x50, 0xd2, 0xa6, 0x9f, 0x48, 0x84, 0x08, 0x4c, 0x89, 0x48, 0x08,
9400
--	0xb2, 0x4c, 0x8c, 0x5d, 0x26, 0xab, 0x6e, 0xd6, 0x4e, 0x14, 0x7a, 0xb7, 0x4c, 0x12, 0x38, 0x4d,
9401
--	0xd3, 0xfe, 0x19, 0x0b, 0x98, 0x85, 0xfb, 0x29, 0xb0, 0x0c, 0x9f, 0x33, 0x59, 0x86, 0xd9, 0xbc,
9402
--	0x41, 0xce, 0xe1, 0x16, 0x5e, 0xe2, 0x2b, 0xab, 0x16, 0x06, 0x0f, 0xf6, 0xc5, 0x4b, 0xf9, 0x00,
9403
--	0x5c, 0xea, 0xff, 0xb1, 0xf8, 0x21, 0xa6, 0x9c, 0xce, 0xd1, 0xf7, 0xc0, 0x68, 0xc3, 0x69, 0x3b,
9404
--	0x0d, 0x1e, 0xb2, 0x37, 0x57, 0x63, 0x63, 0x54, 0x9a, 0x5f, 0x12, 0x35, 0xb8, 0x06, 0x42, 0x46,
9405
--	0xd4, 0x18, 0x95, 0xc5, 0x7d, 0xb5, 0x0e, 0xaa, 0xc9, 0xb9, 0x1d, 0x98, 0x30, 0x88, 0x3d, 0x52,
9406
--	0x71, 0xf5, 0x7b, 0xf8, 0x15, 0xab, 0x22, 0xc0, 0xec, 0xc2, 0x8c, 0xaf, 0xfd, 0xa7, 0x17, 0x8a,
9407
--	0x14, 0x41, 0x3e, 0xde, 0xef, 0x12, 0x65, 0xb7, 0x8f, 0x66, 0xc1, 0x9f, 0x22, 0x83, 0xbb, 0x29,
9408
--	0xdb, 0x3f, 0x65, 0xc1, 0x63, 0x3a, 0xa2, 0x16, 0x0f, 0xa0, 0x9f, 0x0e, 0xb8, 0x0a, 0xa3, 0x41,
9409
--	0x9b, 0x84, 0x4e, 0x1c, 0x84, 0xe2, 0xd6, 0xb8, 0x2a, 0x07, 0xfd, 0x8e, 0x28, 0x3f, 0x12, 0xb1,
9410
--	0x13, 0x25, 0x75, 0x59, 0x8e, 0x55, 0x4d, 0x64, 0xc3, 0x30, 0x1b, 0x8c, 0x48, 0xc4, 0x6a, 0x60,
9411
--	0x67, 0x00, 0x7b, 0x0e, 0x8d, 0xb0, 0x80, 0xd8, 0x7f, 0x64, 0xf1, 0x85, 0xa5, 0x77, 0x1d, 0xbd,
9412
--	0x07, 0xd3, 0xbb, 0x4e, 0xdc, 0xd8, 0x5e, 0x7e, 0xd0, 0x0e, 0xb9, 0xea, 0x5b, 0x8e, 0xd3, 0xb3,
9413
--	0xfd, 0xc6, 0x49, 0xfb, 0xc8, 0xc4, 0x00, 0x6d, 0x2d, 0x45, 0x0c, 0x77, 0x91, 0x47, 0x9b, 0x30,
9414
--	0xc6, 0xca, 0x98, 0xa5, 0x73, 0xd4, 0x8b, 0x35, 0xc8, 0x6b, 0x4d, 0xbd, 0x28, 0xaf, 0x25, 0x74,
9415
--	0xb0, 0x4e, 0xd4, 0xfe, 0x4a, 0x91, 0xef, 0x76, 0xc6, 0x6d, 0x3f, 0x03, 0x23, 0xed, 0xa0, 0xb9,
9416
--	0xb4, 0x5a, 0xc5, 0x62, 0x16, 0xd4, 0x35, 0x52, 0xe3, 0xc5, 0x58, 0xc2, 0xd1, 0x6b, 0x00, 0xe4,
9417
--	0x41, 0x4c, 0x42, 0xdf, 0xf1, 0x94, 0x41, 0x88, 0x32, 0x81, 0xac, 0x06, 0xeb, 0x41, 0x7c, 0x37,
9418
--	0x22, 0xdf, 0xb5, 0xac, 0x50, 0xb0, 0x86, 0x8e, 0xae, 0x03, 0xb4, 0xc3, 0x60, 0xcf, 0x6d, 0x32,
9419
--	0xd7, 0xb9, 0xa2, 0x69, 0x2e, 0x51, 0x53, 0x10, 0xac, 0x61, 0xa1, 0xd7, 0x60, 0xa2, 0xe3, 0x47,
9420
--	0x9c, 0x43, 0x71, 0x36, 0x45, 0xe4, 0xc1, 0xd1, 0xc4, 0x72, 0xe1, 0xae, 0x0e, 0xc4, 0x26, 0x2e,
9421
--	0x5a, 0x80, 0xe1, 0xd8, 0x61, 0xf6, 0x0e, 0x43, 0xf9, 0x76, 0x8b, 0x1b, 0x14, 0x43, 0x0f, 0x18,
9422
--	0x4b, 0x2b, 0x60, 0x51, 0x11, 0xbd, 0x2d, 0xfd, 0x10, 0xf8, 0x59, 0x2f, 0x0c, 0x86, 0x07, 0xbb,
9423
--	0x17, 0x34, 0x2f, 0x04, 0x61, 0x88, 0x6c, 0xd0, 0xb2, 0xbf, 0x51, 0x06, 0x48, 0xd8, 0x71, 0xf4,
9424
--	0x7e, 0xd7, 0x79, 0xf4, 0x5c, 0x6f, 0x06, 0xfe, 0xe4, 0x0e, 0x23, 0xf4, 0xfd, 0x16, 0x8c, 0x39,
9425
--	0x9e, 0x17, 0x34, 0x9c, 0x98, 0x8d, 0x72, 0xa1, 0xf7, 0x79, 0x28, 0xda, 0x5f, 0x48, 0x6a, 0xf0,
9426
--	0x2e, 0xbc, 0x28, 0x17, 0x9e, 0x06, 0xe9, 0xdb, 0x0b, 0xbd, 0x61, 0xf4, 0x29, 0x29, 0xa5, 0xf1,
9427
--	0xe5, 0x31, 0x97, 0x96, 0xd2, 0xca, 0xec, 0xe8, 0xd7, 0x04, 0x34, 0x74, 0xd7, 0x08, 0x2a, 0x57,
9428
--	0xca, 0x8f, 0xaf, 0x60, 0x70, 0xa5, 0xfd, 0xe2, 0xc9, 0xa1, 0x9a, 0xee, 0x38, 0x35, 0x94, 0x1f,
9429
--	0x84, 0x44, 0x13, 0x7f, 0xfa, 0x38, 0x4d, 0xbd, 0x0b, 0x53, 0x4d, 0xf3, 0x6e, 0x17, 0xab, 0xe9,
9430
--	0xe9, 0x3c, 0xba, 0x29, 0x56, 0x20, 0xb9, 0xcd, 0x53, 0x00, 0x9c, 0x26, 0x8c, 0x6a, 0xdc, 0x85,
9431
--	0x6d, 0xd5, 0xdf, 0x0a, 0x84, 0xe1, 0xb9, 0x9d, 0x3b, 0x97, 0xfb, 0x51, 0x4c, 0x76, 0x29, 0x66,
9432
--	0x72, 0x69, 0xaf, 0x8b, 0xba, 0x58, 0x51, 0x41, 0x6f, 0xc0, 0x30, 0xf3, 0x81, 0x8d, 0x66, 0x47,
9433
--	0xf3, 0x15, 0x85, 0x66, 0xf8, 0x86, 0x64, 0x53, 0xb1, 0xbf, 0x11, 0x16, 0x14, 0xd0, 0x4d, 0x19,
9434
--	0xe3, 0x25, 0x5a, 0xf5, 0xef, 0x46, 0x84, 0xc5, 0x78, 0x29, 0x2f, 0x7e, 0x3c, 0x09, 0xdf, 0xc2,
9435
--	0xcb, 0x33, 0x43, 0xc3, 0x1b, 0x35, 0x29, 0x73, 0x24, 0xfe, 0xcb, 0x88, 0xf3, 0xb3, 0x90, 0xdf,
9436
--	0x3d, 0x33, 0x2a, 0x7d, 0x32, 0x9c, 0xf7, 0x4c, 0x12, 0x38, 0x4d, 0x93, 0x32, 0x9a, 0x7c, 0xe7,
9437
--	0x0a, 0xd3, 0xf5, 0x7e, 0xfb, 0x9f, 0xcb, 0xd7, 0xec, 0x92, 0xe1, 0x25, 0x58, 0xd4, 0x3f, 0xd5,
9438
--	0x5b, 0x7f, 0xce, 0x87, 0xe9, 0xf4, 0x16, 0x7d, 0xa4, 0x5c, 0xc6, 0x1f, 0x94, 0x60, 0xd2, 0x5c,
9439
--	0x52, 0xe8, 0x1a, 0x94, 0x05, 0x11, 0x15, 0x70, 0x54, 0xed, 0x92, 0x35, 0x09, 0xc0, 0x09, 0x0e,
9440
--	0x8b, 0x33, 0xcb, 0xaa, 0x6b, 0x26, 0x87, 0x49, 0x9c, 0x59, 0x05, 0xc1, 0x1a, 0x16, 0x95, 0x97,
9441
--	0x36, 0x83, 0x20, 0x56, 0x97, 0x8a, 0x5a, 0x77, 0x8b, 0xac, 0x14, 0x0b, 0x28, 0xbd, 0x4c, 0x76,
9442
--	0x48, 0xe8, 0x13, 0xcf, 0x8c, 0x63, 0xa6, 0x2e, 0x93, 0x5b, 0x3a, 0x10, 0x9b, 0xb8, 0xf4, 0x96,
9443
--	0x0c, 0x22, 0xb6, 0x90, 0x85, 0x54, 0x96, 0x98, 0x70, 0xd6, 0xb9, 0x37, 0xb9, 0x84, 0xa3, 0x2f,
9444
--	0xc0, 0x63, 0xca, 0xf9, 0x1b, 0x73, 0x25, 0xb4, 0x6c, 0x71, 0xd8, 0x50, 0xa2, 0x3c, 0xb6, 0x94,
9445
--	0x8d, 0x86, 0xf3, 0xea, 0xa3, 0xd7, 0x61, 0x52, 0x70, 0xee, 0x92, 0xe2, 0x88, 0x69, 0x17, 0x71,
9446
--	0xcb, 0x80, 0xe2, 0x14, 0xb6, 0x8c, 0xc4, 0xc6, 0x98, 0x67, 0x49, 0x61, 0xb4, 0x3b, 0x12, 0x9b,
9447
--	0x0e, 0xc7, 0x5d, 0x35, 0xd0, 0x02, 0x4c, 0x71, 0xd6, 0xca, 0xf5, 0x5b, 0x7c, 0x4e, 0x84, 0x67,
9448
--	0x89, 0xda, 0x52, 0x77, 0x4c, 0x30, 0x4e, 0xe3, 0xa3, 0x57, 0x61, 0xdc, 0x09, 0x1b, 0xdb, 0x6e,
9449
--	0x4c, 0x1a, 0x71, 0x27, 0xe4, 0x2e, 0x27, 0x9a, 0x61, 0xc9, 0x82, 0x06, 0xc3, 0x06, 0xa6, 0xfd,
9450
--	0x3e, 0x9c, 0xc9, 0x70, 0x4a, 0xa3, 0x0b, 0xc7, 0x69, 0xbb, 0xf2, 0x9b, 0x52, 0xc6, 0x98, 0x0b,
9451
--	0xb5, 0x55, 0xf9, 0x35, 0x1a, 0x16, 0x5d, 0x9d, 0xcc, 0x79, 0x4d, 0x4b, 0x30, 0xa1, 0x56, 0xe7,
9452
--	0x8a, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x5f, 0x05, 0x98, 0xca, 0x50, 0xac, 0xb3, 0x24, 0x07, 0x29,
9453
--	0xd9, 0x23, 0xc9, 0x69, 0x60, 0x06, 0xf6, 0x2b, 0x1c, 0x23, 0xb0, 0x5f, 0xb1, 0x5f, 0x60, 0xbf,
9454
--	0xd2, 0x07, 0x09, 0xec, 0x67, 0x8e, 0xd8, 0xd0, 0x40, 0x23, 0x96, 0x11, 0x0c, 0x70, 0xf8, 0x98,
9455
--	0xc1, 0x00, 0x8d, 0x41, 0x1f, 0x19, 0x60, 0xd0, 0x7f, 0xb4, 0x00, 0xd3, 0x69, 0x03, 0xb8, 0x53,
9456
--	0x50, 0xc7, 0xbe, 0x61, 0xa8, 0x63, 0xb3, 0x53, 0x86, 0xa4, 0xcd, 0xf2, 0xf2, 0x54, 0xb3, 0x38,
9457
--	0xa5, 0x9a, 0xfd, 0xe4, 0x40, 0xd4, 0x7a, 0xab, 0x69, 0xff, 0x6e, 0x01, 0xce, 0xa5, 0xab, 0x2c,
9458
--	0x79, 0x8e, 0xbb, 0x7b, 0x0a, 0x63, 0x73, 0xc7, 0x18, 0x9b, 0xe7, 0x07, 0xf9, 0x1a, 0xd6, 0xb5,
9459
--	0xdc, 0x01, 0x7a, 0x2b, 0x35, 0x40, 0xd7, 0x06, 0x27, 0xd9, 0x7b, 0x94, 0xbe, 0x59, 0x84, 0x4b,
9460
--	0x99, 0xf5, 0x12, 0x6d, 0xe6, 0x8a, 0xa1, 0xcd, 0xbc, 0x9e, 0xd2, 0x66, 0xda, 0xbd, 0x6b, 0x9f,
9461
--	0x8c, 0x7a, 0x53, 0x78, 0x0b, 0xb2, 0xe0, 0x6f, 0x0f, 0xa9, 0xda, 0x34, 0xbc, 0x05, 0x15, 0x21,
9462
--	0x6c, 0xd2, 0xfd, 0x8b, 0xa4, 0xd2, 0xfc, 0x37, 0x16, 0x5c, 0xc8, 0x9c, 0x9b, 0x53, 0x50, 0x61,
9463
--	0xad, 0x9b, 0x2a, 0xac, 0x67, 0x06, 0x5e, 0xad, 0x39, 0x3a, 0xad, 0x3f, 0x2c, 0xe6, 0x7c, 0x0b,
9464
--	0x13, 0xd0, 0xef, 0xc0, 0x98, 0xd3, 0x68, 0x90, 0x28, 0x5a, 0x0b, 0x9a, 0x2a, 0x18, 0xda, 0xf3,
9465
--	0x4c, 0xce, 0x4a, 0x8a, 0x8f, 0x0e, 0x2a, 0x73, 0x69, 0x12, 0x09, 0x18, 0xeb, 0x14, 0xcc, 0xf8,
9466
--	0x8d, 0x85, 0x13, 0x8d, 0xdf, 0x78, 0x1d, 0x60, 0x4f, 0x71, 0xeb, 0x69, 0x21, 0x5f, 0xe3, 0xe3,
9467
--	0x35, 0x2c, 0xf4, 0x45, 0x18, 0x8d, 0xc4, 0x35, 0x2e, 0x96, 0xe2, 0x8b, 0x03, 0xce, 0x95, 0xb3,
9468
--	0x49, 0x3c, 0xd3, 0x2d, 0x5d, 0xe9, 0x43, 0x14, 0x49, 0xf4, 0x1d, 0x30, 0x1d, 0xf1, 0xa8, 0x27,
9469
--	0x4b, 0x9e, 0x13, 0x31, 0x1f, 0x07, 0xb1, 0x0a, 0x99, 0xaf, 0x79, 0x3d, 0x05, 0xc3, 0x5d, 0xd8,
9470
--	0x68, 0x45, 0x7e, 0x14, 0x0b, 0xd1, 0xc2, 0x17, 0xe6, 0x95, 0xe4, 0x83, 0x44, 0x8a, 0xa5, 0xb3,
9471
--	0xe9, 0xe1, 0x67, 0x03, 0xaf, 0xd5, 0xb4, 0x7f, 0xb4, 0x04, 0x8f, 0xf7, 0x38, 0xc4, 0xd0, 0x82,
9472
--	0xf9, 0x46, 0xf9, 0x6c, 0x5a, 0xfa, 0x9d, 0xcb, 0xac, 0x6c, 0x88, 0xc3, 0xa9, 0xb5, 0x52, 0xf8,
9473
--	0xc0, 0x6b, 0xe5, 0x87, 0x2c, 0x4d, 0x2f, 0xc1, 0x2d, 0xe9, 0x3e, 0x77, 0xcc, 0xc3, 0xf9, 0x04,
9474
--	0x15, 0x15, 0x5b, 0x19, 0xd2, 0xfe, 0xf5, 0x81, 0xbb, 0x33, 0xb0, 0xf8, 0x7f, 0xba, 0xda, 0xd9,
9475
--	0xaf, 0x58, 0xf0, 0x64, 0x66, 0x7f, 0x0d, 0x9b, 0x8a, 0x6b, 0x50, 0x6e, 0xd0, 0x42, 0xcd, 0x6f,
9476
--	0x2a, 0x71, 0x28, 0x95, 0x00, 0x9c, 0xe0, 0x18, 0xa6, 0x13, 0x85, 0xbe, 0xa6, 0x13, 0xff, 0xc2,
9477
--	0x82, 0xae, 0x05, 0x7c, 0x0a, 0x27, 0xe9, 0xaa, 0x79, 0x92, 0x7e, 0x7c, 0x90, 0xb9, 0xcc, 0x39,
9478
--	0x44, 0xff, 0xf3, 0x14, 0x9c, 0xcf, 0x71, 0x94, 0xd8, 0x83, 0x99, 0x56, 0x83, 0x98, 0x1e, 0x69,
9479
--	0xe2, 0x63, 0x32, 0x9d, 0xf7, 0x7a, 0xba, 0xaf, 0xb1, 0xdc, 0x38, 0x33, 0x5d, 0x28, 0xb8, 0xbb,
9480
--	0x09, 0xf4, 0x15, 0x0b, 0xce, 0x3a, 0xf7, 0xa3, 0xae, 0x0c, 0x88, 0x62, 0xcd, 0xbc, 0x94, 0xa9,
9481
--	0xa5, 0xe8, 0x93, 0x31, 0x91, 0x27, 0x0b, 0xca, 0xc2, 0xc2, 0x99, 0x6d, 0x21, 0x2c, 0xe2, 0x57,
9482
--	0x52, 0x7e, 0xbb, 0x87, 0xcf, 0x64, 0x96, 0x47, 0x0b, 0x3f, 0x53, 0x25, 0x04, 0x2b, 0x3a, 0xe8,
9483
--	0x1e, 0x94, 0x5b, 0xd2, 0xcd, 0x4c, 0x9c, 0xd9, 0x99, 0x97, 0x60, 0xa6, 0x2f, 0x1a, 0x7f, 0x37,
9484
--	0x54, 0x20, 0x9c, 0x90, 0x42, 0xaf, 0x43, 0xd1, 0xdf, 0x8a, 0x7a, 0x65, 0xd9, 0x49, 0x99, 0x1a,
9485
--	0x71, 0x7f, 0xe4, 0xf5, 0x95, 0x3a, 0xa6, 0x15, 0xd1, 0x4d, 0x28, 0x86, 0x9b, 0x4d, 0xa1, 0x58,
9486
--	0xcb, 0xe4, 0x4b, 0xf1, 0x62, 0x35, 0x7b, 0x91, 0x70, 0x4a, 0x78, 0xb1, 0x8a, 0x29, 0x09, 0x54,
9487
--	0x83, 0x21, 0xe6, 0x53, 0x20, 0xf4, 0x67, 0x99, 0x0c, 0x69, 0x0f, 0xdf, 0x1c, 0xee, 0xb4, 0xcc,
9488
--	0x10, 0x30, 0x27, 0x84, 0x36, 0x60, 0xb8, 0xc1, 0x32, 0xb2, 0x88, 0x90, 0xc9, 0x9f, 0xca, 0x54,
9489
--	0xa1, 0xf5, 0x48, 0x55, 0x23, 0x34, 0x4a, 0x0c, 0x03, 0x0b, 0x5a, 0x8c, 0x2a, 0x69, 0x6f, 0x6f,
9490
--	0x45, 0x4c, 0x04, 0xcf, 0xa3, 0xda, 0x23, 0x03, 0x93, 0xa0, 0xca, 0x30, 0xb0, 0xa0, 0x85, 0x3e,
9491
--	0x03, 0x85, 0xad, 0x86, 0x70, 0x39, 0xc8, 0xd4, 0xa5, 0x99, 0x2e, 0xe5, 0x8b, 0xc3, 0x87, 0x07,
9492
--	0x95, 0xc2, 0xca, 0x12, 0x2e, 0x6c, 0x35, 0xd0, 0x3a, 0x8c, 0x6c, 0x71, 0x27, 0x54, 0xa1, 0x2e,
9493
--	0x7b, 0x3a, 0xdb, 0x3f, 0xb6, 0xcb, 0x4f, 0x95, 0x9b, 0xca, 0x0b, 0x00, 0x96, 0x44, 0x58, 0x10,
9494
--	0x48, 0xe5, 0x4c, 0x2b, 0xa2, 0x21, 0xcf, 0x1f, 0xcf, 0x01, 0x9a, 0xbb, 0xb7, 0x27, 0x2e, 0xb9,
9495
--	0x58, 0xa3, 0x88, 0xbe, 0x0c, 0x65, 0x47, 0xe6, 0xde, 0x13, 0xd1, 0x22, 0x5e, 0xcc, 0xdc, 0x98,
9496
--	0xbd, 0xd3, 0x12, 0xf2, 0x55, 0xad, 0x90, 0x70, 0x42, 0x14, 0xed, 0xc0, 0xc4, 0x5e, 0xd4, 0xde,
9497
--	0x26, 0x72, 0x23, 0xb3, 0xe0, 0x11, 0x39, 0x17, 0xd7, 0x3d, 0x81, 0xe8, 0x86, 0x71, 0xc7, 0xf1,
9498
--	0xba, 0xce, 0x1e, 0xf6, 0xd8, 0x7c, 0x4f, 0x27, 0x86, 0x4d, 0xda, 0x74, 0xf8, 0xdf, 0xeb, 0x04,
9499
--	0x9b, 0xfb, 0x31, 0x11, 0xe1, 0x93, 0x33, 0x87, 0xff, 0x4d, 0x8e, 0xd2, 0x3d, 0xfc, 0x02, 0x80,
9500
--	0x25, 0x11, 0xba, 0xd5, 0x1d, 0x99, 0xd7, 0x92, 0x85, 0x4d, 0xce, 0xd9, 0xea, 0x99, 0xc9, 0x2f,
9501
--	0xb5, 0x41, 0x61, 0x67, 0x64, 0x42, 0x8a, 0x9d, 0x8d, 0xed, 0xed, 0x20, 0x0e, 0xfc, 0xd4, 0xb9,
9502
--	0x3c, 0x93, 0x7f, 0x36, 0xd6, 0x32, 0xf0, 0xbb, 0xcf, 0xc6, 0x2c, 0x2c, 0x9c, 0xd9, 0x16, 0x6a,
9503
--	0xc2, 0x64, 0x3b, 0x08, 0xe3, 0xfb, 0x41, 0x28, 0xd7, 0x17, 0xea, 0x21, 0xee, 0x1b, 0x98, 0xa2,
9504
--	0x45, 0x16, 0xce, 0xdb, 0x84, 0xe0, 0x14, 0x4d, 0xf4, 0x79, 0x18, 0x89, 0x1a, 0x8e, 0x47, 0x56,
9505
--	0xef, 0xcc, 0x9e, 0xc9, 0xbf, 0x74, 0xea, 0x1c, 0x25, 0x67, 0x75, 0xb1, 0xc9, 0x11, 0x28, 0x58,
9506
--	0x92, 0x43, 0x2b, 0x30, 0xc4, 0x62, 0xf2, 0xb3, 0xc8, 0xcf, 0x39, 0x51, 0x89, 0xba, 0x8c, 0x3a,
9507
--	0xf9, 0xd9, 0xc4, 0x8a, 0x31, 0xaf, 0x4e, 0xf7, 0x80, 0xe0, 0x7a, 0x83, 0x68, 0xf6, 0x5c, 0xfe,
9508
--	0x1e, 0x10, 0xcc, 0xf2, 0x9d, 0x7a, 0xaf, 0x3d, 0xa0, 0x90, 0x70, 0x42, 0x94, 0x9e, 0xcc, 0xf4,
9509
--	0x34, 0x3d, 0xdf, 0xc3, 0xce, 0x24, 0xf7, 0x2c, 0x65, 0x27, 0x33, 0x3d, 0x49, 0x29, 0x09, 0xfb,
9510
--	0xf7, 0x46, 0xba, 0x39, 0x15, 0x26, 0x27, 0xfd, 0x65, 0xab, 0xeb, 0x09, 0xed, 0xd3, 0x83, 0xaa,
9511
--	0x6d, 0x4e, 0x90, 0x47, 0xfd, 0x8a, 0x05, 0xe7, 0xdb, 0x99, 0x1f, 0x22, 0xae, 0xfd, 0xc1, 0xb4,
9512
--	0x3f, 0xfc, 0xd3, 0x55, 0x74, 0xf6, 0x6c, 0x38, 0xce, 0x69, 0x29, 0x2d, 0x07, 0x14, 0x3f, 0xb0,
9513
--	0x1c, 0xb0, 0x06, 0xa3, 0x8c, 0xb5, 0xec, 0x93, 0xa1, 0x2c, 0xed, 0x85, 0xc6, 0x18, 0x88, 0x25,
9514
--	0x51, 0x11, 0x2b, 0x12, 0xe8, 0x87, 0x2d, 0xb8, 0x98, 0xee, 0x3a, 0x26, 0x0c, 0x2c, 0x62, 0x99,
9515
--	0x73, 0x11, 0x6d, 0x45, 0x7c, 0xff, 0xc5, 0x5a, 0x2f, 0xe4, 0xa3, 0x7e, 0x08, 0xb8, 0x77, 0x63,
9516
--	0xa8, 0x9a, 0x21, 0x23, 0x0e, 0x9b, 0x7a, 0xf1, 0x01, 0xe4, 0xc4, 0x97, 0x60, 0x7c, 0x37, 0xe8,
9517
--	0xf8, 0xb1, 0x30, 0x4b, 0x11, 0x4e, 0x82, 0xec, 0x1d, 0x78, 0x4d, 0x2b, 0xc7, 0x06, 0x56, 0x4a,
9518
--	0xba, 0x1c, 0x7d, 0x58, 0xe9, 0x12, 0xbd, 0x93, 0xca, 0x43, 0x5d, 0xce, 0x8f, 0x99, 0x27, 0x04,
9519
--	0xf1, 0x63, 0x64, 0xa3, 0x3e, 0x5d, 0x89, 0xe8, 0xe7, 0xac, 0x0c, 0x56, 0x9e, 0xcb, 0xc8, 0x9f,
9520
--	0x35, 0x65, 0xe4, 0x2b, 0x69, 0x19, 0xb9, 0x4b, 0x27, 0x6a, 0x88, 0xc7, 0x83, 0x07, 0x5e, 0x1e,
9521
--	0x34, 0x92, 0x99, 0xed, 0xc1, 0xe5, 0x7e, 0xd7, 0x12, 0xb3, 0x4f, 0x6a, 0xaa, 0x17, 0xb0, 0xc4,
9522
--	0x3e, 0xa9, 0xb9, 0x5a, 0xc5, 0x0c, 0x32, 0x68, 0xa8, 0x0b, 0xfb, 0xbf, 0x59, 0x50, 0xac, 0x05,
9523
--	0xcd, 0x53, 0xd0, 0xf1, 0x7e, 0xce, 0xd0, 0xf1, 0x3e, 0x9e, 0x93, 0x1f, 0x3c, 0x57, 0xa3, 0xbb,
9524
--	0x9c, 0xd2, 0xe8, 0x5e, 0xcc, 0x23, 0xd0, 0x5b, 0x7f, 0xfb, 0xd3, 0x45, 0xd0, 0xb3, 0x99, 0xa3,
9525
--	0x7f, 0xf5, 0x30, 0xc6, 0xc1, 0xc5, 0x5e, 0x09, 0xce, 0x05, 0x65, 0x66, 0xd6, 0x24, 0xfd, 0xde,
9526
--	0xfe, 0x9c, 0xd9, 0x08, 0xbf, 0x45, 0xdc, 0xd6, 0x76, 0x4c, 0x9a, 0xe9, 0xcf, 0x39, 0x3d, 0x1b,
9527
--	0xe1, 0xff, 0x62, 0xc1, 0x54, 0xaa, 0x75, 0xe4, 0xc1, 0x84, 0xa7, 0x2b, 0xe8, 0xc4, 0x3a, 0x7d,
9528
--	0x28, 0xdd, 0x9e, 0xb0, 0xb1, 0xd4, 0x8a, 0xb0, 0x49, 0x1c, 0xcd, 0x03, 0xa8, 0x07, 0x34, 0xa9,
9529
--	0xf7, 0x62, 0x5c, 0xbf, 0x7a, 0x61, 0x8b, 0xb0, 0x86, 0x81, 0x5e, 0x86, 0xb1, 0x38, 0x68, 0x07,
9530
--	0x5e, 0xd0, 0xda, 0xbf, 0x45, 0x64, 0x70, 0x15, 0x65, 0x39, 0xb5, 0x91, 0x80, 0xb0, 0x8e, 0x67,
9531
--	0xff, 0x6c, 0x11, 0xd2, 0x19, 0xf0, 0xbf, 0xb5, 0x26, 0x3f, 0x9a, 0x6b, 0xf2, 0x9b, 0x16, 0x4c,
9532
--	0xd3, 0xd6, 0x99, 0x15, 0x87, 0xbc, 0x6c, 0x55, 0x02, 0x18, 0xab, 0x47, 0x02, 0x98, 0x2b, 0xf4,
9533
--	0xec, 0x6a, 0x06, 0x9d, 0x58, 0xe8, 0xcd, 0xb4, 0xc3, 0x89, 0x96, 0x62, 0x01, 0x15, 0x78, 0x24,
9534
--	0x0c, 0x85, 0x6b, 0x92, 0x8e, 0x47, 0xc2, 0x10, 0x0b, 0xa8, 0xcc, 0x0f, 0x53, 0xca, 0xc9, 0x0f,
9535
--	0xc3, 0x42, 0xc5, 0x89, 0xf7, 0x7e, 0xc1, 0xf6, 0x68, 0xa1, 0xe2, 0xa4, 0x21, 0x40, 0x82, 0x63,
9536
--	0xff, 0x62, 0x11, 0xc6, 0x6b, 0x41, 0x33, 0x79, 0xc2, 0x7a, 0xc9, 0x78, 0xc2, 0xba, 0x9c, 0x7a,
9537
--	0xc2, 0x9a, 0xd6, 0x71, 0xbf, 0xf5, 0x60, 0xf5, 0x61, 0x3d, 0x58, 0xfd, 0x73, 0x8b, 0xcd, 0x5a,
9538
--	0x75, 0xbd, 0x2e, 0xf2, 0xd3, 0xbe, 0x00, 0x63, 0xec, 0x40, 0x62, 0xbe, 0x70, 0xf2, 0x5d, 0x87,
9539
--	0x85, 0x7e, 0x5f, 0x4f, 0x8a, 0xb1, 0x8e, 0x83, 0xae, 0xc2, 0x68, 0x44, 0x9c, 0xb0, 0xb1, 0xad,
9540
--	0xce, 0x38, 0xf1, 0xea, 0xc1, 0xcb, 0xb0, 0x82, 0xa2, 0x37, 0x93, 0x28, 0x65, 0xc5, 0xfc, 0x4c,
9541
--	0xab, 0x7a, 0x7f, 0xf8, 0x16, 0xc9, 0x0f, 0x4d, 0x66, 0xbf, 0x05, 0xa8, 0x1b, 0x7f, 0x80, 0x78,
9542
--	0x44, 0x15, 0x33, 0x1e, 0x51, 0xb9, 0x2b, 0x16, 0xd1, 0x9f, 0x5a, 0x30, 0x59, 0x0b, 0x9a, 0x74,
9543
--	0xeb, 0xfe, 0x45, 0xda, 0xa7, 0x7a, 0x88, 0xc6, 0xe1, 0x1e, 0x21, 0x1a, 0xff, 0x9e, 0x05, 0x23,
9544
--	0xb5, 0xa0, 0x79, 0x0a, 0xda, 0xf6, 0xcf, 0x9a, 0xda, 0xf6, 0xc7, 0x72, 0x96, 0x44, 0x8e, 0x82,
9545
--	0xfd, 0x97, 0x8b, 0x30, 0x41, 0xfb, 0x19, 0xb4, 0xe4, 0x2c, 0x19, 0x23, 0x62, 0x0d, 0x30, 0x22,
9546
--	0x94, 0xcd, 0x0d, 0x3c, 0x2f, 0xb8, 0x9f, 0x9e, 0xb1, 0x15, 0x56, 0x8a, 0x05, 0x14, 0x3d, 0x07,
9547
--	0xa3, 0xed, 0x90, 0xec, 0xb9, 0x81, 0xe0, 0x1f, 0xb5, 0xb7, 0x8b, 0x9a, 0x28, 0xc7, 0x0a, 0x83,
9548
--	0xca, 0x5d, 0x91, 0xeb, 0x37, 0x88, 0x4c, 0xf3, 0x5c, 0x62, 0x99, 0xa0, 0x78, 0xec, 0x65, 0xad,
9549
--	0x1c, 0x1b, 0x58, 0xe8, 0x2d, 0x28, 0xb3, 0xff, 0xec, 0x44, 0x39, 0x7e, 0xe6, 0x1a, 0x91, 0xf0,
9550
--	0x40, 0x10, 0xc0, 0x09, 0x2d, 0x74, 0x1d, 0x20, 0x96, 0xf1, 0x79, 0x23, 0x11, 0x56, 0x46, 0xf1,
9551
--	0xda, 0x2a, 0x72, 0x6f, 0x84, 0x35, 0x2c, 0xf4, 0x2c, 0x94, 0x63, 0xc7, 0xf5, 0x6e, 0xbb, 0x3e,
9552
--	0x89, 0x98, 0xca, 0xb9, 0x28, 0xf3, 0x19, 0x88, 0x42, 0x9c, 0xc0, 0x29, 0xaf, 0xc3, 0x7c, 0xae,
9553
--	0x79, 0xde, 0xab, 0x51, 0x86, 0xcd, 0x78, 0x9d, 0xdb, 0xaa, 0x14, 0x6b, 0x18, 0xf6, 0xab, 0x70,
9554
--	0xae, 0x16, 0x34, 0x6b, 0x41, 0x18, 0xaf, 0x04, 0xe1, 0x7d, 0x27, 0x6c, 0xca, 0xf9, 0xab, 0xc8,
9555
--	0xd0, 0xfa, 0xf4, 0xec, 0x19, 0xe2, 0x3b, 0xd3, 0x08, 0x9a, 0xff, 0x22, 0xe3, 0x76, 0x8e, 0xe9,
9556
--	0x6b, 0xd1, 0x60, 0xf7, 0xae, 0x4a, 0x71, 0x77, 0xc3, 0x89, 0x09, 0xba, 0xc3, 0xd2, 0x62, 0x25,
9557
--	0x57, 0x90, 0xa8, 0xfe, 0x8c, 0x96, 0x16, 0x2b, 0x01, 0x66, 0xde, 0x59, 0x66, 0x7d, 0xfb, 0xd7,
9558
--	0x8b, 0xec, 0x34, 0x4a, 0x65, 0x7c, 0x43, 0x5f, 0x82, 0xc9, 0x88, 0xdc, 0x76, 0xfd, 0xce, 0x03,
9559
--	0x29, 0x84, 0xf7, 0xf0, 0x96, 0xa9, 0x2f, 0xeb, 0x98, 0x5c, 0x95, 0x67, 0x96, 0xe1, 0x14, 0x35,
9560
--	0x3a, 0x4f, 0x61, 0xc7, 0x5f, 0x88, 0xee, 0x46, 0x24, 0x14, 0x19, 0xc7, 0xd8, 0x3c, 0x61, 0x59,
9561
--	0x88, 0x13, 0x38, 0x5d, 0x97, 0xec, 0xcf, 0x7a, 0xe0, 0xe3, 0x20, 0x88, 0xe5, 0x4a, 0x66, 0x39,
9562
--	0x6b, 0xb4, 0x72, 0x6c, 0x60, 0xa1, 0x15, 0x40, 0x51, 0xa7, 0xdd, 0xf6, 0xd8, 0x7b, 0xbb, 0xe3,
9563
--	0xdd, 0x08, 0x83, 0x4e, 0x9b, 0xbf, 0x75, 0x16, 0x17, 0xcf, 0xd3, 0x2b, 0xac, 0xde, 0x05, 0xc5,
9564
--	0x19, 0x35, 0xe8, 0xe9, 0xb3, 0x15, 0xb1, 0xdf, 0x6c, 0x75, 0x17, 0x85, 0x7a, 0xbd, 0xce, 0x8a,
9565
--	0xb0, 0x84, 0xd1, 0xc5, 0xc4, 0x9a, 0xe7, 0x98, 0xc3, 0xc9, 0x62, 0xc2, 0xaa, 0x14, 0x6b, 0x18,
9566
--	0x68, 0x19, 0x46, 0xa2, 0xfd, 0xa8, 0x11, 0x8b, 0x20, 0x48, 0x39, 0xb9, 0x23, 0xeb, 0x0c, 0x45,
9567
--	0xcb, 0x67, 0xc0, 0xab, 0x60, 0x59, 0xd7, 0xfe, 0x1e, 0x76, 0x19, 0xb2, 0xfc, 0x54, 0x71, 0x27,
9568
--	0x24, 0x68, 0x17, 0x26, 0xda, 0x6c, 0xca, 0x45, 0xf4, 0x64, 0x31, 0x6f, 0x2f, 0x0d, 0x28, 0xd5,
9569
--	0xde, 0xa7, 0x07, 0x8d, 0xd2, 0x3a, 0x31, 0x71, 0xa1, 0xa6, 0x93, 0xc3, 0x26, 0x75, 0xfb, 0x07,
9570
--	0x67, 0xd8, 0x99, 0x5b, 0xe7, 0xa2, 0xea, 0x88, 0xb0, 0xf8, 0x15, 0x7c, 0xf9, 0x5c, 0xbe, 0xce,
9571
--	0x24, 0xf9, 0x22, 0x61, 0x35, 0x8c, 0x65, 0x5d, 0xf4, 0x26, 0x7b, 0x9b, 0xe6, 0x07, 0x5d, 0xbf,
9572
--	0x34, 0xc1, 0x1c, 0xcb, 0x78, 0x86, 0x16, 0x15, 0xb1, 0x46, 0x04, 0xdd, 0x86, 0x09, 0x91, 0xce,
9573
--	0x48, 0x28, 0xc5, 0x8a, 0x86, 0xd2, 0x63, 0x02, 0xeb, 0xc0, 0xa3, 0x74, 0x01, 0x36, 0x2b, 0xa3,
9574
--	0x16, 0x5c, 0xd4, 0x72, 0xfb, 0xdd, 0x08, 0x1d, 0xf6, 0x5e, 0xe9, 0xb2, 0x4d, 0xa4, 0x9d, 0x9b,
9575
--	0x4f, 0x1e, 0x1e, 0x54, 0x2e, 0x6e, 0xf4, 0x42, 0xc4, 0xbd, 0xe9, 0xa0, 0x3b, 0x70, 0x8e, 0x3b,
9576
--	0xd6, 0x55, 0x89, 0xd3, 0xf4, 0x5c, 0x5f, 0x1d, 0xcc, 0x7c, 0x1d, 0x5e, 0x38, 0x3c, 0xa8, 0x9c,
9577
--	0x5b, 0xc8, 0x42, 0xc0, 0xd9, 0xf5, 0xd0, 0x67, 0xa1, 0xdc, 0xf4, 0x23, 0x31, 0x06, 0xc3, 0x46,
9578
--	0xda, 0xca, 0x72, 0x75, 0xbd, 0xae, 0xbe, 0x3f, 0xf9, 0x83, 0x93, 0x0a, 0xa8, 0xc5, 0x15, 0x63,
9579
--	0x4a, 0x0e, 0x1d, 0xc9, 0x4f, 0x51, 0x2e, 0x96, 0x84, 0xe1, 0x5a, 0xc3, 0x35, 0xc2, 0xca, 0x34,
9580
--	0xd5, 0xf0, 0xba, 0x31, 0x08, 0xa3, 0x37, 0x00, 0x51, 0x46, 0xcd, 0x6d, 0x90, 0x85, 0x06, 0x0b,
9581
--	0x62, 0xcd, 0xf4, 0x88, 0xa3, 0x86, 0x2b, 0x03, 0xaa, 0x77, 0x61, 0xe0, 0x8c, 0x5a, 0xe8, 0x26,
9582
--	0x3d, 0xc8, 0xf4, 0x52, 0x61, 0x62, 0x2b, 0x99, 0xfb, 0xd9, 0x2a, 0x69, 0x87, 0xa4, 0xe1, 0xc4,
9583
--	0xa4, 0x69, 0x52, 0xc4, 0xa9, 0x7a, 0xf4, 0x2e, 0x55, 0xf9, 0x6c, 0xc0, 0x8c, 0x54, 0xd1, 0x9d,
9584
--	0xd3, 0x86, 0xca, 0xc5, 0xdb, 0x41, 0x14, 0xaf, 0x93, 0xf8, 0x7e, 0x10, 0xee, 0x88, 0xc0, 0x60,
9585
--	0x49, 0x8c, 0xca, 0x04, 0x84, 0x75, 0x3c, 0xca, 0x07, 0xb3, 0xc7, 0xe1, 0xd5, 0x2a, 0x7b, 0xa1,
9586
--	0x1b, 0x4d, 0xf6, 0xc9, 0x4d, 0x5e, 0x8c, 0x25, 0x5c, 0xa2, 0xae, 0xd6, 0x96, 0xd8, 0x6b, 0x5b,
9587
--	0x0a, 0x75, 0xb5, 0xb6, 0x84, 0x25, 0x1c, 0x91, 0xee, 0x94, 0xa0, 0x93, 0xf9, 0x5a, 0xcd, 0xee,
9588
--	0xeb, 0x60, 0xc0, 0xac, 0xa0, 0x3e, 0x4c, 0xab, 0x64, 0xa4, 0x3c, 0x62, 0x5a, 0x34, 0x3b, 0xc5,
9589
--	0x16, 0xc9, 0xe0, 0xe1, 0xd6, 0x94, 0x9e, 0x78, 0x35, 0x45, 0x09, 0x77, 0xd1, 0x36, 0x62, 0x87,
9590
--	0x4c, 0xf7, 0xcd, 0x47, 0x74, 0x0d, 0xca, 0x51, 0x67, 0xb3, 0x19, 0xec, 0x3a, 0xae, 0xcf, 0x1e,
9591
--	0xc7, 0x34, 0x26, 0xab, 0x2e, 0x01, 0x38, 0xc1, 0x41, 0x2b, 0x30, 0xea, 0x48, 0x25, 0x30, 0xca,
9592
--	0x0f, 0x26, 0xa0, 0x54, 0xbf, 0xdc, 0xbf, 0x56, 0xaa, 0x7d, 0x55, 0x5d, 0xf4, 0x1a, 0x4c, 0x08,
9593
--	0x77, 0x2a, 0x1e, 0x62, 0x81, 0x3d, 0x5e, 0x69, 0xf6, 0xf2, 0x75, 0x1d, 0x88, 0x4d, 0x5c, 0xf4,
9594
--	0x45, 0x98, 0xa4, 0x54, 0x92, 0x83, 0x6d, 0xf6, 0xec, 0x20, 0x27, 0xa2, 0x96, 0x67, 0x42, 0xaf,
9595
--	0x8c, 0x53, 0xc4, 0x50, 0x13, 0x9e, 0x70, 0x3a, 0x71, 0xc0, 0x14, 0xe9, 0xe6, 0xfa, 0xdf, 0x08,
9596
--	0x76, 0x88, 0xcf, 0xde, 0xb0, 0x46, 0x17, 0x2f, 0x1f, 0x1e, 0x54, 0x9e, 0x58, 0xe8, 0x81, 0x87,
9597
--	0x7b, 0x52, 0x41, 0x77, 0x61, 0x2c, 0x0e, 0x3c, 0x66, 0xb9, 0x4e, 0x59, 0x89, 0xf3, 0xf9, 0xb1,
9598
--	0x77, 0x36, 0x14, 0x9a, 0xae, 0x44, 0x52, 0x55, 0xb1, 0x4e, 0x07, 0x6d, 0xf0, 0x3d, 0xc6, 0xa2,
9599
--	0x92, 0x92, 0x68, 0xf6, 0xb1, 0xfc, 0x81, 0x51, 0xc1, 0x4b, 0xcd, 0x2d, 0x28, 0x6a, 0x62, 0x9d,
9600
--	0x0c, 0xba, 0x01, 0x33, 0xed, 0xd0, 0x0d, 0xd8, 0xc2, 0x56, 0x8f, 0x18, 0xb3, 0x66, 0x6a, 0x81,
9601
--	0x5a, 0x1a, 0x01, 0x77, 0xd7, 0xa1, 0x42, 0xa6, 0x2c, 0x9c, 0xbd, 0xc0, 0xf3, 0x54, 0x71, 0xc6,
9602
--	0x9b, 0x97, 0x61, 0x05, 0x45, 0x6b, 0xec, 0x5c, 0xe6, 0xe2, 0xe0, 0xec, 0x5c, 0x7e, 0x10, 0x06,
9603
--	0x5d, 0x6c, 0xe4, 0xfc, 0x92, 0xfa, 0x8b, 0x13, 0x0a, 0xf4, 0xde, 0x88, 0xb6, 0x9d, 0x90, 0xd4,
9604
--	0xc2, 0xa0, 0x41, 0x78, 0x67, 0xb8, 0xd1, 0xfc, 0xe3, 0x3c, 0x78, 0x22, 0xbd, 0x37, 0xea, 0x59,
9605
--	0x08, 0x38, 0xbb, 0x1e, 0x6a, 0x6a, 0xe9, 0x99, 0x29, 0x1b, 0x1a, 0xcd, 0x3e, 0xd1, 0xc3, 0xcc,
9606
--	0x28, 0xc5, 0xb3, 0x26, 0x6b, 0xd1, 0x28, 0x8e, 0x70, 0x8a, 0xe6, 0xdc, 0xb7, 0xc3, 0x4c, 0xd7,
9607
--	0x7d, 0x71, 0xac, 0xb8, 0xdd, 0x7f, 0x32, 0x04, 0x65, 0xa5, 0x0a, 0x47, 0xd7, 0xcc, 0x17, 0x8e,
9608
--	0x0b, 0xe9, 0x17, 0x8e, 0x51, 0xca, 0x91, 0xeb, 0x8f, 0x1a, 0x1b, 0x86, 0x51, 0x5c, 0x21, 0x3f,
9609
--	0x4b, 0x96, 0xce, 0x53, 0xf7, 0xf5, 0x80, 0xd3, 0x34, 0x1b, 0xc5, 0x81, 0x9f, 0x4a, 0x4a, 0x3d,
9610
--	0x95, 0x25, 0x03, 0x26, 0xa9, 0xa5, 0xc2, 0x7f, 0x3b, 0x68, 0xae, 0xd6, 0xd2, 0x59, 0x1b, 0x6b,
9611
--	0xb4, 0x10, 0x73, 0x18, 0x13, 0xdf, 0x28, 0x73, 0xc3, 0xc4, 0xb7, 0x91, 0x87, 0x14, 0xdf, 0x24,
9612
--	0x01, 0x9c, 0xd0, 0x42, 0x1e, 0xcc, 0x34, 0xcc, 0x84, 0x9b, 0xca, 0xeb, 0xed, 0xa9, 0xbe, 0xa9,
9613
--	0x2f, 0x3b, 0x5a, 0x76, 0xb3, 0xa5, 0x34, 0x15, 0xdc, 0x4d, 0x18, 0xbd, 0x06, 0xa3, 0xef, 0x05,
9614
--	0x11, 0xdb, 0x7c, 0xe2, 0x86, 0x97, 0xde, 0x41, 0xa3, 0x6f, 0xde, 0xa9, 0xb3, 0xf2, 0xa3, 0x83,
9615
--	0xca, 0x58, 0x2d, 0x68, 0xca, 0xbf, 0x58, 0x55, 0x40, 0x0f, 0xe0, 0x9c, 0x71, 0x2e, 0xaa, 0xee,
9616
--	0xc2, 0xe0, 0xdd, 0xbd, 0x28, 0x9a, 0x3b, 0xb7, 0x9a, 0x45, 0x09, 0x67, 0x37, 0x40, 0x0f, 0x1b,
9617
--	0x3f, 0x10, 0xc9, 0x6a, 0x25, 0x17, 0xc1, 0x98, 0x85, 0xb2, 0xee, 0x1b, 0x9e, 0x42, 0xc0, 0xdd,
9618
--	0x75, 0xec, 0xaf, 0xf1, 0x97, 0x03, 0xa1, 0x5f, 0x24, 0x51, 0xc7, 0x3b, 0x8d, 0x5c, 0x48, 0xcb,
9619
--	0x86, 0xea, 0xf3, 0xa1, 0x5f, 0xa7, 0x7e, 0xd3, 0x62, 0xaf, 0x53, 0x1b, 0x64, 0xb7, 0xed, 0x51,
9620
--	0x29, 0xf7, 0xd1, 0x77, 0xfc, 0x4d, 0x18, 0x8d, 0x45, 0x6b, 0xbd, 0xd2, 0x37, 0x69, 0x9d, 0x62,
9621
--	0x2f, 0x74, 0x8a, 0xbf, 0x90, 0xa5, 0x58, 0x91, 0xb1, 0xff, 0x29, 0x9f, 0x01, 0x09, 0x39, 0x05,
9622
--	0x35, 0x54, 0xd5, 0x54, 0x43, 0x55, 0xfa, 0x7c, 0x41, 0x8e, 0x3a, 0xea, 0x9f, 0x98, 0xfd, 0x66,
9623
--	0xa2, 0xdc, 0x47, 0xfd, 0x59, 0xd4, 0xfe, 0x31, 0x0b, 0xce, 0x66, 0xd9, 0x11, 0x51, 0x9e, 0x90,
9624
--	0x0b, 0x92, 0xea, 0x99, 0x58, 0x8d, 0xe0, 0x3d, 0x51, 0x8e, 0x15, 0xc6, 0xc0, 0x99, 0x11, 0x8e,
9625
--	0x17, 0x3e, 0xed, 0x0e, 0x4c, 0xd4, 0x42, 0xa2, 0xdd, 0x01, 0xaf, 0x73, 0x37, 0x33, 0xde, 0x9f,
9626
--	0xe7, 0x8e, 0xed, 0x62, 0x66, 0xff, 0x7c, 0x01, 0xce, 0xf2, 0x77, 0x9e, 0x85, 0xbd, 0xc0, 0x6d,
9627
--	0xd6, 0x82, 0xa6, 0xc8, 0x6a, 0xf1, 0x36, 0x8c, 0xb7, 0x35, 0xe9, 0xbf, 0x57, 0x00, 0x27, 0x5d,
9628
--	0x4b, 0x90, 0x48, 0x61, 0x7a, 0x29, 0x36, 0x68, 0xa1, 0x26, 0x8c, 0x93, 0x3d, 0xb7, 0xa1, 0x1e,
9629
--	0x0b, 0x0a, 0xc7, 0xbe, 0x1b, 0x54, 0x2b, 0xcb, 0x1a, 0x1d, 0x6c, 0x50, 0x7d, 0x04, 0x89, 0xce,
9630
--	0xec, 0x1f, 0xb7, 0xe0, 0xb1, 0x9c, 0x70, 0x4f, 0xb4, 0xb9, 0xfb, 0xec, 0x45, 0x4d, 0xe4, 0x4c,
9631
--	0x52, 0xcd, 0xf1, 0x77, 0x36, 0x2c, 0xa0, 0xe8, 0xf3, 0x00, 0xfc, 0x9d, 0x8c, 0x0a, 0x25, 0xfd,
9632
--	0xe2, 0xe2, 0x18, 0x21, 0x3d, 0xb4, 0x50, 0x0c, 0xb2, 0x3e, 0xd6, 0x68, 0xd9, 0x3f, 0x53, 0x84,
9633
--	0x21, 0xf6, 0x2e, 0x83, 0x56, 0x60, 0x64, 0x9b, 0x07, 0x37, 0x1e, 0x24, 0x8e, 0x72, 0x22, 0xdd,
9634
--	0xf1, 0x02, 0x2c, 0x2b, 0xa3, 0x35, 0x38, 0xc3, 0x83, 0x43, 0x7b, 0x55, 0xe2, 0x39, 0xfb, 0x52,
9635
--	0x49, 0xc0, 0xf3, 0x0c, 0xa9, 0xb0, 0x12, 0xab, 0xdd, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x1d, 0x26,
9636
--	0x63, 0x77, 0x97, 0x04, 0x9d, 0x58, 0x52, 0xe2, 0x61, 0xa1, 0x15, 0x1b, 0xb7, 0x61, 0x40, 0x71,
9637
--	0x0a, 0x9b, 0x8a, 0x3b, 0xed, 0x2e, 0x75, 0x88, 0x96, 0xb9, 0xdf, 0x54, 0x81, 0x98, 0xb8, 0xcc,
9638
--	0x80, 0xa8, 0xc3, 0xcc, 0xa5, 0x36, 0xb6, 0x43, 0x12, 0x6d, 0x07, 0x5e, 0x53, 0xa4, 0xa9, 0x4e,
9639
--	0x0c, 0x88, 0x52, 0x70, 0xdc, 0x55, 0x83, 0x52, 0xd9, 0x72, 0x5c, 0xaf, 0x13, 0x92, 0x84, 0xca,
9640
--	0xb0, 0x49, 0x65, 0x25, 0x05, 0xc7, 0x5d, 0x35, 0xe8, 0x3a, 0x3a, 0x27, 0xf2, 0x46, 0x4b, 0x67,
9641
--	0x77, 0x65, 0x15, 0x36, 0x22, 0xdd, 0x7e, 0x7a, 0x44, 0x7b, 0x11, 0x76, 0x33, 0x2a, 0xf3, 0xb4,
9642
--	0xa6, 0xc5, 0x13, 0x0e, 0x3f, 0x92, 0xca, 0xc3, 0x64, 0x2f, 0xfe, 0x3d, 0x0b, 0xce, 0x64, 0x58,
9643
--	0x9f, 0xf2, 0xa3, 0xaa, 0xe5, 0x46, 0xb1, 0xca, 0xa5, 0xa2, 0x1d, 0x55, 0xbc, 0x1c, 0x2b, 0x0c,
9644
--	0xba, 0x1f, 0xf8, 0x61, 0x98, 0x3e, 0x00, 0x85, 0x75, 0x97, 0x80, 0x1e, 0xef, 0x00, 0x44, 0x97,
9645
--	0xa1, 0xd4, 0x89, 0x88, 0x8c, 0xd3, 0xa4, 0xce, 0x6f, 0xa6, 0xd7, 0x65, 0x10, 0xca, 0x9a, 0xb6,
9646
--	0x94, 0x4a, 0x55, 0x63, 0x4d, 0xb9, 0x9e, 0x94, 0xc3, 0xec, 0xaf, 0x16, 0xe1, 0x42, 0xae, 0x9d,
9647
--	0x39, 0xed, 0xd2, 0x6e, 0xe0, 0xbb, 0x71, 0xa0, 0xde, 0xfc, 0x78, 0xa4, 0x10, 0xd2, 0xde, 0x5e,
9648
--	0x13, 0xe5, 0x58, 0x61, 0xa0, 0x2b, 0x32, 0x83, 0x79, 0x3a, 0x5b, 0xcc, 0x62, 0xd5, 0x48, 0x62,
9649
--	0x3e, 0x68, 0x26, 0xae, 0xa7, 0xa0, 0xd4, 0x0e, 0x02, 0x2f, 0x7d, 0x18, 0xd1, 0xee, 0x06, 0x81,
9650
--	0x87, 0x19, 0x10, 0x7d, 0x42, 0x8c, 0x43, 0xea, 0x91, 0x0b, 0x3b, 0xcd, 0x20, 0xd2, 0x06, 0xe3,
9651
--	0x19, 0x18, 0xd9, 0x21, 0xfb, 0xa1, 0xeb, 0xb7, 0xd2, 0x8f, 0x9f, 0xb7, 0x78, 0x31, 0x96, 0x70,
9652
--	0x33, 0x59, 0xc2, 0xc8, 0x49, 0xa7, 0xd0, 0x1a, 0xed, 0x7b, 0xb5, 0xfd, 0x50, 0x11, 0xa6, 0xf0,
9653
--	0x62, 0xf5, 0x5b, 0x13, 0x71, 0xb7, 0x7b, 0x22, 0x4e, 0x3a, 0x85, 0x56, 0xff, 0xd9, 0xf8, 0x65,
9654
--	0x0b, 0xa6, 0x58, 0x40, 0x61, 0x11, 0x9f, 0xc2, 0x0d, 0xfc, 0x53, 0x60, 0xdd, 0x9e, 0x82, 0xa1,
9655
--	0x90, 0x36, 0x9a, 0xce, 0x8b, 0xc3, 0x7a, 0x82, 0x39, 0x0c, 0x3d, 0x01, 0x25, 0xd6, 0x05, 0x3a,
9656
--	0x79, 0xe3, 0x3c, 0xa5, 0x40, 0xd5, 0x89, 0x1d, 0xcc, 0x4a, 0x99, 0xd3, 0x35, 0x26, 0x6d, 0xcf,
9657
--	0xe5, 0x9d, 0x4e, 0x1e, 0x14, 0x3e, 0x1a, 0x4e, 0xd7, 0x99, 0x5d, 0xfb, 0x60, 0x4e, 0xd7, 0xd9,
9658
--	0x24, 0x7b, 0x8b, 0x45, 0xff, 0xbd, 0x00, 0x97, 0x32, 0xeb, 0x0d, 0xec, 0x74, 0xdd, 0xbb, 0xf6,
9659
--	0xc9, 0xd8, 0xb0, 0x64, 0x9b, 0x96, 0x14, 0x4f, 0xd1, 0xb4, 0xa4, 0x34, 0x28, 0xe7, 0x38, 0x34,
9660
--	0x80, 0x2f, 0x74, 0xe6, 0x90, 0x7d, 0x44, 0x7c, 0xa1, 0x33, 0xfb, 0x96, 0x23, 0xd6, 0xfd, 0x59,
9661
--	0x21, 0xe7, 0x5b, 0x98, 0x80, 0x77, 0x95, 0x9e, 0x33, 0x0c, 0x18, 0x09, 0x4e, 0x78, 0x9c, 0x9f,
9662
--	0x31, 0xbc, 0x0c, 0x2b, 0x28, 0x72, 0x35, 0xaf, 0xe2, 0x42, 0x7e, 0xd6, 0xc4, 0xdc, 0xa6, 0xe6,
9663
--	0xcd, 0xf7, 0x1f, 0x35, 0x04, 0x19, 0x1e, 0xc6, 0x6b, 0x9a, 0x50, 0x5e, 0x1c, 0x5c, 0x28, 0x1f,
9664
--	0xcf, 0x16, 0xc8, 0xd1, 0x02, 0x4c, 0xed, 0xba, 0x3e, 0xcb, 0x82, 0x6f, 0xb2, 0xa2, 0x2a, 0xc8,
9665
--	0xc6, 0x9a, 0x09, 0xc6, 0x69, 0xfc, 0xb9, 0xd7, 0x60, 0xe2, 0xe1, 0xd5, 0x91, 0xdf, 0x2c, 0xc2,
9666
--	0xe3, 0x3d, 0xb6, 0x3d, 0x3f, 0xeb, 0x8d, 0x39, 0xd0, 0xce, 0xfa, 0xae, 0x79, 0xa8, 0xc1, 0xd9,
9667
--	0xad, 0x8e, 0xe7, 0xed, 0x33, 0xeb, 0x4d, 0xd2, 0x94, 0x18, 0x82, 0x57, 0x7c, 0x42, 0x26, 0x71,
9668
--	0x58, 0xc9, 0xc0, 0xc1, 0x99, 0x35, 0xd1, 0x1b, 0x80, 0x02, 0x91, 0xb2, 0xf5, 0x06, 0xf1, 0x85,
9669
--	0x56, 0x9d, 0x0d, 0x7c, 0x31, 0xd9, 0x8c, 0x77, 0xba, 0x30, 0x70, 0x46, 0x2d, 0xca, 0xf4, 0xd3,
9670
--	0x5b, 0x69, 0x5f, 0x75, 0x2b, 0xc5, 0xf4, 0x63, 0x1d, 0x88, 0x4d, 0x5c, 0x74, 0x03, 0x66, 0x9c,
9671
--	0x3d, 0xc7, 0xe5, 0xc1, 0xe7, 0x24, 0x01, 0xce, 0xf5, 0x2b, 0x25, 0xd8, 0x42, 0x1a, 0x01, 0x77,
9672
--	0xd7, 0x49, 0xb9, 0x35, 0x0f, 0xe7, 0xbb, 0x35, 0xf7, 0x3e, 0x17, 0xfb, 0xe9, 0x74, 0xed, 0xff,
9673
--	0x68, 0xd1, 0xeb, 0x2b, 0x23, 0xed, 0x3a, 0x1d, 0x07, 0xa5, 0x9b, 0xd4, 0x3c, 0x8c, 0xcf, 0x69,
9674
--	0xf6, 0x19, 0x09, 0x10, 0x9b, 0xb8, 0x7c, 0x41, 0x44, 0x89, 0x8b, 0x8b, 0xc1, 0xba, 0x8b, 0x10,
9675
--	0x02, 0x0a, 0x03, 0x7d, 0x01, 0x46, 0x9a, 0xee, 0x9e, 0x1b, 0x05, 0xa1, 0xd8, 0x2c, 0xc7, 0x74,
9676
--	0x14, 0x48, 0xce, 0xc1, 0x2a, 0x27, 0x83, 0x25, 0x3d, 0xfb, 0x87, 0x0a, 0x30, 0x21, 0x5b, 0x7c,
9677
--	0xb3, 0x13, 0xc4, 0xce, 0x29, 0x5c, 0xcb, 0x37, 0x8c, 0x6b, 0xf9, 0x13, 0xbd, 0xe2, 0x28, 0xb0,
9678
--	0x2e, 0xe5, 0x5e, 0xc7, 0x77, 0x52, 0xd7, 0xf1, 0xd3, 0xfd, 0x49, 0xf5, 0xbe, 0x86, 0xff, 0x99,
9679
--	0x05, 0x33, 0x06, 0xfe, 0x29, 0xdc, 0x06, 0x2b, 0xe6, 0x6d, 0xf0, 0x64, 0xdf, 0x6f, 0xc8, 0xb9,
9680
--	0x05, 0xbe, 0xaf, 0x98, 0xea, 0x3b, 0x3b, 0xfd, 0xdf, 0x83, 0xd2, 0xb6, 0x13, 0x36, 0x7b, 0xc5,
9681
--	0x6b, 0xed, 0xaa, 0x34, 0x7f, 0xd3, 0x09, 0x9b, 0xfc, 0x0c, 0x7f, 0x4e, 0x25, 0x7a, 0x74, 0xc2,
9682
--	0x66, 0x5f, 0x8f, 0x2e, 0xd6, 0x14, 0x7a, 0x15, 0x86, 0xa3, 0x46, 0xd0, 0x56, 0xf6, 0x96, 0x97,
9683
--	0x79, 0x12, 0x48, 0x5a, 0x72, 0x74, 0x50, 0x41, 0x66, 0x73, 0xb4, 0x18, 0x0b, 0x7c, 0xf4, 0x36,
9684
--	0x4c, 0xb0, 0x5f, 0xca, 0xee, 0xa0, 0x98, 0x9f, 0x25, 0xa0, 0xae, 0x23, 0x72, 0xf3, 0x15, 0xa3,
9685
--	0x08, 0x9b, 0xa4, 0xe6, 0x5a, 0x50, 0x56, 0x9f, 0xf5, 0x48, 0x3d, 0x71, 0xfe, 0x5d, 0x11, 0xce,
9686
--	0x64, 0xac, 0x39, 0x14, 0x19, 0x33, 0xf1, 0xc2, 0x80, 0x4b, 0xf5, 0x03, 0xce, 0x45, 0xc4, 0xa4,
9687
--	0xa1, 0xa6, 0x58, 0x5b, 0x03, 0x37, 0x7a, 0x37, 0x22, 0xe9, 0x46, 0x69, 0x51, 0xff, 0x46, 0x69,
9688
--	0x63, 0xa7, 0x36, 0xd4, 0xb4, 0x21, 0xd5, 0xd3, 0x47, 0x3a, 0xa7, 0x7f, 0x5c, 0x84, 0xb3, 0x59,
9689
--	0xa1, 0x5d, 0xd0, 0x77, 0xa7, 0xb2, 0xc1, 0xbc, 0x34, 0x68, 0x50, 0x18, 0x9e, 0x22, 0x46, 0xe4,
9690
--	0x36, 0x9e, 0x37, 0xf3, 0xc3, 0xf4, 0x1d, 0x66, 0xd1, 0x26, 0x73, 0xdf, 0x0c, 0x79, 0x16, 0x1f,
9691
--	0x79, 0x7c, 0x7c, 0x7a, 0xe0, 0x0e, 0x88, 0xf4, 0x3f, 0x51, 0xca, 0x7d, 0x53, 0x16, 0xf7, 0x77,
9692
--	0xdf, 0x94, 0x2d, 0xcf, 0xb9, 0x30, 0xa6, 0x7d, 0xcd, 0x23, 0x9d, 0xf1, 0x1d, 0x7a, 0x5b, 0x69,
9693
--	0xfd, 0x7e, 0xa4, 0xb3, 0xfe, 0xe3, 0x16, 0xa4, 0x8c, 0x1b, 0x95, 0xba, 0xcb, 0xca, 0x55, 0x77,
9694
--	0x5d, 0x86, 0x52, 0x18, 0x78, 0x24, 0x9d, 0xa0, 0x05, 0x07, 0x1e, 0xc1, 0x0c, 0x42, 0x31, 0xe2,
9695
--	0x44, 0xd9, 0x31, 0xae, 0x0b, 0x72, 0x42, 0x44, 0x7b, 0x0a, 0x86, 0x3c, 0xb2, 0x47, 0xbc, 0x74,
9696
--	0xf4, 0xf3, 0xdb, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0xcb, 0x25, 0xb8, 0xd8, 0xd3, 0x01, 0x9a, 0x8a,
9697
--	0x43, 0x2d, 0x27, 0x26, 0xf7, 0x9d, 0xfd, 0x74, 0x98, 0xe2, 0x1b, 0xbc, 0x18, 0x4b, 0x38, 0xb3,
9698
--	0xf7, 0xe6, 0x61, 0x09, 0x53, 0xca, 0x41, 0x11, 0x8d, 0x50, 0x40, 0x1f, 0x41, 0x5e, 0xf7, 0xeb,
9699
--	0x00, 0x51, 0xe4, 0x2d, 0xfb, 0x94, 0xbb, 0x6b, 0x0a, 0x43, 0xf2, 0x24, 0x7c, 0x65, 0xfd, 0xb6,
9700
--	0x80, 0x60, 0x0d, 0x0b, 0x55, 0x61, 0xba, 0x1d, 0x06, 0x31, 0xd7, 0xb5, 0x56, 0xb9, 0x99, 0xcf,
9701
--	0x90, 0xe9, 0x7b, 0x5a, 0x4b, 0xc1, 0x71, 0x57, 0x0d, 0xf4, 0x32, 0x8c, 0x09, 0x7f, 0xd4, 0x5a,
9702
--	0x10, 0x78, 0x42, 0x0d, 0xa4, 0x8c, 0x46, 0xea, 0x09, 0x08, 0xeb, 0x78, 0x5a, 0x35, 0xa6, 0xc0,
9703
--	0x1d, 0xc9, 0xac, 0xc6, 0x95, 0xb8, 0x1a, 0x5e, 0x2a, 0xcc, 0xd3, 0xe8, 0x40, 0x61, 0x9e, 0x12,
9704
--	0xc5, 0x58, 0x79, 0xe0, 0x37, 0x2b, 0xe8, 0xab, 0x4a, 0xfa, 0x85, 0x12, 0x9c, 0x11, 0x0b, 0xe7,
9705
--	0x51, 0x2f, 0x97, 0x47, 0x94, 0x7d, 0xfe, 0x5b, 0x6b, 0xe6, 0xb4, 0xd7, 0xcc, 0x0f, 0x5b, 0x60,
9706
--	0xb2, 0x57, 0xe8, 0xff, 0xcb, 0x8d, 0xf3, 0xfe, 0x72, 0x2e, 0xbb, 0xd6, 0x94, 0x17, 0xc8, 0x07,
9707
--	0x8c, 0xf8, 0x6e, 0xff, 0x07, 0x0b, 0x9e, 0xec, 0x4b, 0x11, 0x2d, 0x43, 0x99, 0xf1, 0x80, 0x9a,
9708
--	0x74, 0xf6, 0xb4, 0x32, 0x03, 0x94, 0x80, 0x1c, 0x96, 0x34, 0xa9, 0x89, 0x96, 0xbb, 0x02, 0xea,
9709
--	0x3f, 0x93, 0x11, 0x50, 0xff, 0x9c, 0x31, 0x3c, 0x0f, 0x19, 0x51, 0xff, 0x6b, 0x45, 0x18, 0xe6,
9710
--	0x2b, 0xfe, 0x14, 0xc4, 0xb0, 0x15, 0xa1, 0xb7, 0xed, 0x11, 0x47, 0x8a, 0xf7, 0x65, 0xbe, 0xea,
9711
--	0xc4, 0x0e, 0x67, 0x13, 0xd4, 0x6d, 0x95, 0x68, 0x78, 0xd1, 0xbc, 0x71, 0x9f, 0xcd, 0xa5, 0x14,
9712
--	0x93, 0xc0, 0x69, 0x68, 0xb7, 0xdb, 0x97, 0x00, 0x22, 0x96, 0x68, 0x9e, 0xd2, 0x10, 0x11, 0xc9,
9713
--	0x3e, 0xd9, 0xa3, 0xf5, 0xba, 0x42, 0xe6, 0x7d, 0x48, 0x76, 0xba, 0x02, 0x60, 0x8d, 0xe2, 0xdc,
9714
--	0x2b, 0x50, 0x56, 0xc8, 0xfd, 0xb4, 0x38, 0xe3, 0x3a, 0x73, 0xf1, 0x39, 0x98, 0x4a, 0xb5, 0x75,
9715
--	0x2c, 0x25, 0xd0, 0xaf, 0x58, 0x30, 0xc5, 0xbb, 0xbc, 0xec, 0xef, 0x89, 0x33, 0xf5, 0x7d, 0x38,
9716
--	0xeb, 0x65, 0x9c, 0x6d, 0x62, 0x46, 0x07, 0x3f, 0x0b, 0x95, 0xd2, 0x27, 0x0b, 0x8a, 0x33, 0xdb,
9717
--	0x40, 0x57, 0xe9, 0xba, 0xa5, 0x67, 0x97, 0xe3, 0x09, 0xdf, 0xa1, 0x71, 0xbe, 0x66, 0x79, 0x19,
9718
--	0x56, 0x50, 0xfb, 0x77, 0x2c, 0x98, 0xe1, 0x3d, 0xbf, 0x45, 0xf6, 0xd5, 0x0e, 0xff, 0x30, 0xfb,
9719
--	0x2e, 0x72, 0x5c, 0x14, 0x72, 0x72, 0x5c, 0xe8, 0x9f, 0x56, 0xec, 0xf9, 0x69, 0x3f, 0x6f, 0x81,
9720
--	0x58, 0x81, 0xa7, 0x20, 0xca, 0x7f, 0xbb, 0x29, 0xca, 0xcf, 0xe5, 0x2f, 0xea, 0x1c, 0x19, 0xfe,
9721
--	0x4f, 0x2d, 0x98, 0xe6, 0x08, 0xc9, 0x5b, 0xf2, 0x87, 0x3a, 0x0f, 0x83, 0x24, 0xab, 0x53, 0xd9,
9722
--	0xa9, 0xb3, 0x3f, 0xca, 0x98, 0xac, 0x52, 0xcf, 0xc9, 0x6a, 0xca, 0x0d, 0x74, 0x8c, 0x24, 0x8c,
9723
--	0xc7, 0x8e, 0x15, 0x6d, 0xff, 0x91, 0x05, 0x88, 0x37, 0x63, 0xb0, 0x3f, 0x94, 0xa9, 0x60, 0xa5,
9724
--	0xda, 0x75, 0x91, 0x1c, 0x35, 0x0a, 0x82, 0x35, 0xac, 0x13, 0x19, 0x9e, 0x94, 0x41, 0x40, 0xb1,
9725
--	0xbf, 0x41, 0xc0, 0x31, 0x46, 0xf4, 0x6b, 0x25, 0x48, 0x1b, 0xf3, 0xa3, 0x7b, 0x30, 0xde, 0x70,
9726
--	0xda, 0xce, 0xa6, 0xeb, 0xb9, 0xb1, 0x4b, 0xa2, 0x5e, 0x96, 0x44, 0x4b, 0x1a, 0x9e, 0x78, 0xea,
9727
--	0xd5, 0x4a, 0xb0, 0x41, 0x07, 0xcd, 0x03, 0xb4, 0x43, 0x77, 0xcf, 0xf5, 0x48, 0x8b, 0x69, 0x1c,
9728
--	0x98, 0xb7, 0x22, 0x37, 0x8f, 0x91, 0xa5, 0x58, 0xc3, 0xc8, 0x70, 0x3c, 0x2b, 0x3e, 0x3a, 0xc7,
9729
--	0xb3, 0xd2, 0x31, 0x1d, 0xcf, 0x86, 0x06, 0x72, 0x3c, 0xc3, 0x70, 0x5e, 0xb2, 0x48, 0xf4, 0xff,
9730
--	0x8a, 0xeb, 0x11, 0xc1, 0x17, 0x73, 0x1f, 0xc6, 0xb9, 0xc3, 0x83, 0xca, 0x79, 0x9c, 0x89, 0x81,
9731
--	0x73, 0x6a, 0xa2, 0xcf, 0xc3, 0xac, 0xe3, 0x79, 0xc1, 0x7d, 0x35, 0x6a, 0xcb, 0x51, 0xc3, 0xf1,
9732
--	0xb8, 0xc6, 0x7e, 0x84, 0x51, 0x7d, 0xe2, 0xf0, 0xa0, 0x32, 0xbb, 0x90, 0x83, 0x83, 0x73, 0x6b,
9733
--	0xa7, 0xfc, 0xd6, 0x46, 0xfb, 0xf9, 0xad, 0xd9, 0x3b, 0x70, 0xa6, 0x4e, 0x42, 0x97, 0xa5, 0x88,
9734
--	0x6c, 0x26, 0x5b, 0x72, 0x03, 0xca, 0x61, 0xea, 0x10, 0x1a, 0x28, 0xb0, 0x91, 0x16, 0x06, 0x57,
9735
--	0x1e, 0x3a, 0x09, 0x21, 0xfb, 0x4f, 0x2c, 0x18, 0x11, 0x0e, 0x05, 0xa7, 0xc0, 0xfb, 0x2c, 0x18,
9736
--	0x2a, 0xe8, 0x4a, 0xf6, 0x41, 0xcd, 0x3a, 0x93, 0xab, 0x7c, 0x5e, 0x4d, 0x29, 0x9f, 0x9f, 0xec,
9737
--	0x45, 0xa4, 0xb7, 0xda, 0xf9, 0x6f, 0x15, 0x61, 0xd2, 0x74, 0xa6, 0x38, 0x85, 0x21, 0x58, 0x87,
9738
--	0x91, 0x48, 0x78, 0xee, 0x14, 0xf2, 0x6d, 0x9f, 0xd3, 0x93, 0x98, 0x18, 0x36, 0x09, 0x5f, 0x1d,
9739
--	0x49, 0x24, 0xd3, 0x25, 0xa8, 0xf8, 0x08, 0x5d, 0x82, 0xfa, 0xf9, 0xb3, 0x94, 0x4e, 0xc2, 0x9f,
9740
--	0xc5, 0xfe, 0x3a, 0xbb, 0x2c, 0xf4, 0xf2, 0x53, 0xe0, 0x23, 0x6e, 0x98, 0xd7, 0x8a, 0xdd, 0x63,
9741
--	0x65, 0x89, 0x4e, 0xe5, 0xf0, 0x13, 0xbf, 0x64, 0xc1, 0xc5, 0x8c, 0xaf, 0xd2, 0x98, 0x8b, 0xe7,
9742
--	0x60, 0xd4, 0xe9, 0x34, 0x5d, 0xb5, 0x97, 0xb5, 0x87, 0xa8, 0x05, 0x51, 0x8e, 0x15, 0x06, 0x5a,
9743
--	0x82, 0x19, 0xf2, 0xa0, 0xed, 0xf2, 0x97, 0x40, 0xdd, 0xfa, 0xb0, 0xc8, 0x43, 0xbc, 0x2e, 0xa7,
9744
--	0x81, 0xb8, 0x1b, 0x5f, 0xb9, 0x43, 0x17, 0x73, 0xdd, 0xa1, 0xff, 0xa1, 0x05, 0x63, 0xa2, 0xdb,
9745
--	0xa7, 0x30, 0xda, 0xdf, 0x61, 0x8e, 0xf6, 0xe3, 0x3d, 0x46, 0x3b, 0x67, 0x98, 0xff, 0x4e, 0x41,
9746
--	0xf5, 0xb7, 0x16, 0x84, 0xf1, 0x00, 0x4c, 0xcb, 0xab, 0x30, 0xda, 0x0e, 0x83, 0x38, 0x68, 0x04,
9747
--	0x9e, 0xe0, 0x59, 0x9e, 0x48, 0xbc, 0xf5, 0x79, 0xf9, 0x91, 0xf6, 0x1b, 0x2b, 0x6c, 0x36, 0x7a,
9748
--	0x41, 0x18, 0x0b, 0x3e, 0x21, 0x19, 0xbd, 0x20, 0x8c, 0x31, 0x83, 0xa0, 0x26, 0x40, 0xec, 0x84,
9749
--	0x2d, 0x12, 0xd3, 0x32, 0x11, 0xf8, 0x23, 0xff, 0xf0, 0xe8, 0xc4, 0xae, 0x37, 0xef, 0xfa, 0x71,
9750
--	0x14, 0x87, 0xf3, 0xab, 0x7e, 0x7c, 0x27, 0xe4, 0x22, 0x90, 0xe6, 0x7e, 0xaf, 0x68, 0x61, 0x8d,
9751
--	0xae, 0xf4, 0x91, 0x64, 0x6d, 0x0c, 0x99, 0x4f, 0xda, 0xeb, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x15,
9752
--	0x76, 0x95, 0xb0, 0x01, 0x3a, 0x9e, 0x67, 0xfc, 0x37, 0x46, 0xd5, 0xd0, 0xb2, 0xf7, 0xac, 0xaa,
9753
--	0xee, 0x7f, 0xdf, 0xfb, 0xe4, 0xa6, 0x0d, 0xeb, 0x9e, 0x30, 0x89, 0x93, 0x3e, 0xfa, 0xce, 0x2e,
9754
--	0x4b, 0x87, 0xe7, 0xfb, 0x5c, 0x01, 0xc7, 0xb0, 0x6d, 0x60, 0x61, 0xa7, 0x59, 0x78, 0xde, 0xd5,
9755
--	0x9a, 0x58, 0xe4, 0x5a, 0xd8, 0x69, 0x01, 0xc0, 0x09, 0x0e, 0xba, 0x26, 0x04, 0xe8, 0x92, 0x91,
9756
--	0x1d, 0x4e, 0x0a, 0xd0, 0xf2, 0xf3, 0x35, 0x09, 0xfa, 0x05, 0x18, 0x53, 0x59, 0xe2, 0x6a, 0x3c,
9757
--	0xd9, 0x96, 0x08, 0x83, 0xb2, 0x9c, 0x14, 0x63, 0x1d, 0x07, 0x6d, 0xc0, 0x54, 0xc4, 0xb5, 0x27,
9758
--	0x2a, 0xda, 0x1d, 0xd7, 0x42, 0x7d, 0x52, 0x5a, 0x48, 0xd4, 0x4d, 0xf0, 0x11, 0x2b, 0xe2, 0x47,
9759
--	0x87, 0x74, 0x74, 0x4c, 0x93, 0x40, 0xaf, 0xc3, 0xa4, 0xa7, 0xe7, 0x5a, 0xaf, 0x09, 0x25, 0x95,
9760
--	0x32, 0x20, 0x36, 0x32, 0xb1, 0xd7, 0x70, 0x0a, 0x9b, 0xf2, 0x3a, 0x7a, 0x89, 0x88, 0xd0, 0xe8,
9761
--	0xf8, 0x2d, 0x12, 0x89, 0x1c, 0x57, 0x8c, 0xd7, 0xb9, 0x9d, 0x83, 0x83, 0x73, 0x6b, 0xa3, 0x57,
9762
--	0x61, 0x5c, 0x7e, 0xbe, 0xe6, 0xc6, 0x9b, 0x98, 0xa9, 0x6b, 0x30, 0x6c, 0x60, 0xa2, 0xfb, 0x70,
9763
--	0x4e, 0xfe, 0xdf, 0x08, 0x9d, 0xad, 0x2d, 0xb7, 0x21, 0xbc, 0xa8, 0xb9, 0xaf, 0xce, 0x82, 0x74,
9764
--	0xfe, 0x59, 0xce, 0x42, 0x3a, 0x3a, 0xa8, 0x5c, 0x16, 0xa3, 0x96, 0x09, 0x67, 0x93, 0x98, 0x4d,
9765
--	0x1f, 0xad, 0xc1, 0x99, 0x6d, 0xe2, 0x78, 0xf1, 0xf6, 0xd2, 0x36, 0x69, 0xec, 0xc8, 0x4d, 0xc4,
9766
--	0x9c, 0x83, 0x35, 0xe3, 0xee, 0x9b, 0xdd, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x07, 0x66, 0xdb, 0x9d,
9767
--	0x4d, 0xcf, 0x8d, 0xb6, 0xd7, 0x83, 0x98, 0x19, 0x65, 0xa8, 0x24, 0x6b, 0xc2, 0x8b, 0x58, 0x39,
9768
--	0x46, 0xd7, 0x72, 0xf0, 0x70, 0x2e, 0x05, 0xf4, 0x3e, 0x9c, 0x4b, 0x2d, 0x06, 0xe1, 0xd3, 0x38,
9769
--	0x99, 0x1f, 0xef, 0xb6, 0x9e, 0x55, 0x41, 0xf8, 0x28, 0x66, 0x81, 0x70, 0x76, 0x13, 0x1f, 0xcc,
9770
--	0x54, 0xe7, 0x3d, 0x5a, 0x59, 0x63, 0xca, 0xd0, 0x97, 0x61, 0x5c, 0x5f, 0x45, 0xe2, 0x82, 0xb9,
9771
--	0x92, 0xcd, 0xb3, 0x68, 0xab, 0x8d, 0xb3, 0x74, 0x6a, 0x45, 0xe9, 0x30, 0x6c, 0x50, 0xb4, 0x09,
9772
--	0x64, 0x7f, 0x1f, 0xba, 0x0d, 0xa3, 0x0d, 0xcf, 0x25, 0x7e, 0xbc, 0x5a, 0xeb, 0x15, 0x74, 0x63,
9773
--	0x49, 0xe0, 0x88, 0x01, 0x13, 0x01, 0x42, 0x79, 0x19, 0x56, 0x14, 0xec, 0xdf, 0x28, 0x40, 0xa5,
9774
--	0x4f, 0xb4, 0xd9, 0x94, 0x46, 0xd9, 0x1a, 0x48, 0xa3, 0xbc, 0x20, 0x53, 0xc6, 0xad, 0xa7, 0xc4,
9775
--	0xec, 0x54, 0x3a, 0xb8, 0x44, 0xd8, 0x4e, 0xe3, 0x0f, 0x6c, 0xe1, 0xab, 0x2b, 0xa5, 0x4b, 0x7d,
9776
--	0x6d, 0xcf, 0x8d, 0xc7, 0xa8, 0xa1, 0xc1, 0x05, 0x91, 0xdc, 0x87, 0x05, 0xfb, 0xeb, 0x05, 0x38,
9777
--	0xa7, 0x86, 0xf0, 0x2f, 0xee, 0xc0, 0xdd, 0xed, 0x1e, 0xb8, 0x13, 0x78, 0x96, 0xb1, 0xef, 0xc0,
9778
--	0x30, 0x0f, 0x5a, 0x32, 0x00, 0x03, 0xf4, 0x94, 0x19, 0xe1, 0x4a, 0x5d, 0xd3, 0x46, 0x94, 0xab,
9779
--	0xbf, 0x62, 0xc1, 0xd4, 0xc6, 0x52, 0xad, 0x1e, 0x34, 0x76, 0x48, 0xbc, 0xc0, 0x19, 0x56, 0x2c,
9780
--	0xf8, 0x1f, 0xeb, 0x21, 0xf9, 0x9a, 0x2c, 0x8e, 0xe9, 0x32, 0x94, 0xb6, 0x83, 0x28, 0x4e, 0xbf,
9781
--	0xd9, 0xde, 0x0c, 0xa2, 0x18, 0x33, 0x88, 0xfd, 0xbb, 0x16, 0x0c, 0xb1, 0x44, 0xa7, 0xfd, 0xb2,
9782
--	0xef, 0x0e, 0xf2, 0x5d, 0xe8, 0x65, 0x18, 0x26, 0x5b, 0x5b, 0xa4, 0x11, 0x8b, 0x59, 0x95, 0x0e,
9783
--	0xa5, 0xc3, 0xcb, 0xac, 0x94, 0x5e, 0xfa, 0xac, 0x31, 0xfe, 0x17, 0x0b, 0x64, 0xf4, 0x16, 0x94,
9784
--	0x63, 0x77, 0x97, 0x2c, 0x34, 0x9b, 0xe2, 0xd5, 0xeb, 0x21, 0xfc, 0x77, 0x37, 0x24, 0x01, 0x9c,
9785
--	0xd0, 0xb2, 0xbf, 0x5a, 0x00, 0x48, 0x5c, 0xef, 0xfb, 0x7d, 0xe2, 0x62, 0xd7, 0x7b, 0xc8, 0x95,
9786
--	0x8c, 0xf7, 0x10, 0x94, 0x10, 0xcc, 0x78, 0x0c, 0x51, 0xc3, 0x54, 0x1c, 0x68, 0x98, 0x4a, 0xc7,
9787
--	0x19, 0xa6, 0x25, 0x98, 0x49, 0x42, 0x07, 0x98, 0x71, 0x54, 0x98, 0x90, 0xb2, 0x91, 0x06, 0xe2,
9788
--	0x6e, 0x7c, 0x9b, 0xc0, 0x65, 0x19, 0xd1, 0x52, 0xde, 0x35, 0xcc, 0xa8, 0xf2, 0x18, 0x89, 0x98,
9789
--	0x93, 0x07, 0x9f, 0x42, 0xee, 0x83, 0xcf, 0x4f, 0x59, 0x70, 0x36, 0xdd, 0x0e, 0xf3, 0x5e, 0xfb,
9790
--	0x01, 0x0b, 0xce, 0xb1, 0x67, 0x2f, 0xd6, 0x6a, 0xf7, 0x23, 0xdb, 0x4b, 0xd9, 0x21, 0x15, 0x7a,
9791
--	0xf7, 0x38, 0xf1, 0x5c, 0x5e, 0xcb, 0x22, 0x8d, 0xb3, 0x5b, 0xb4, 0xbf, 0xdf, 0x02, 0xe1, 0x24,
9792
--	0x34, 0xc0, 0xc6, 0x7e, 0x5b, 0xa6, 0x2a, 0x35, 0x02, 0x78, 0x5f, 0xce, 0xf7, 0x9a, 0x12, 0x61,
9793
--	0xbb, 0xd5, 0x45, 0x6a, 0x04, 0xeb, 0x36, 0x68, 0xd9, 0x4d, 0x10, 0xd0, 0x2a, 0x61, 0x7a, 0xa2,
9794
--	0xfe, 0xbd, 0xb9, 0x0e, 0xd0, 0x64, 0xb8, 0x5a, 0xc2, 0x42, 0x75, 0x6c, 0x57, 0x15, 0x04, 0x6b,
9795
--	0x58, 0xf6, 0x8f, 0x14, 0x60, 0x4c, 0x06, 0x8c, 0xee, 0xf8, 0x83, 0x48, 0x73, 0xc7, 0xca, 0x1b,
9796
--	0xc3, 0x32, 0x7c, 0x52, 0xc2, 0xb5, 0x44, 0x08, 0x4e, 0x32, 0x7c, 0x4a, 0x00, 0x4e, 0x70, 0xd0,
9797
--	0x33, 0x30, 0x12, 0x75, 0x36, 0x19, 0x7a, 0xca, 0xf5, 0xa5, 0xce, 0x8b, 0xb1, 0x84, 0xa3, 0xcf,
9798
--	0xc3, 0x34, 0xaf, 0x17, 0x06, 0x6d, 0xa7, 0xc5, 0x95, 0x86, 0x43, 0xca, 0x17, 0x75, 0x7a, 0x2d,
9799
--	0x05, 0x3b, 0x3a, 0xa8, 0x9c, 0x4d, 0x97, 0x31, 0x75, 0x73, 0x17, 0x15, 0xfb, 0xcb, 0x80, 0xba,
9800
--	0x63, 0x60, 0xa3, 0x37, 0xb8, 0x01, 0x92, 0x1b, 0x92, 0x66, 0x2f, 0x3d, 0xb2, 0xee, 0x3a, 0x29,
9801
--	0xcd, 0xcf, 0x79, 0x2d, 0xac, 0xea, 0xdb, 0x7f, 0xad, 0x08, 0xd3, 0x69, 0x47, 0x3a, 0x74, 0x13,
9802
--	0x86, 0xf9, 0x05, 0x23, 0xc8, 0xf7, 0x78, 0xa6, 0xd4, 0xdc, 0xef, 0xd8, 0x56, 0x13, 0x77, 0x94,
9803
--	0xa8, 0x8f, 0xde, 0x81, 0xb1, 0x66, 0x70, 0xdf, 0xbf, 0xef, 0x84, 0xcd, 0x85, 0xda, 0xaa, 0x58,
9804
--	0x97, 0x99, 0x7c, 0x6a, 0x35, 0x41, 0xd3, 0x5d, 0xfa, 0x98, 0x4a, 0x3e, 0x01, 0x61, 0x9d, 0x1c,
9805
--	0xda, 0x60, 0x71, 0xfd, 0xb6, 0xdc, 0xd6, 0x9a, 0xd3, 0xee, 0x65, 0x8d, 0xba, 0x24, 0x91, 0x34,
9806
--	0xca, 0x13, 0x22, 0xf8, 0x1f, 0x07, 0xe0, 0x84, 0x10, 0xfa, 0x6e, 0x38, 0x13, 0xe5, 0xa8, 0xb6,
9807
--	0xf2, 0x52, 0x22, 0xf4, 0xd2, 0xf6, 0x2c, 0x3e, 0x46, 0x25, 0x88, 0x2c, 0x25, 0x58, 0x56, 0x33,
9808
--	0xf6, 0x57, 0xce, 0x80, 0xb1, 0x1b, 0x8d, 0xbc, 0x38, 0xd6, 0x09, 0xe5, 0xc5, 0xc1, 0x30, 0x4a,
9809
--	0x76, 0xdb, 0xf1, 0x7e, 0xd5, 0x0d, 0x7b, 0x25, 0x56, 0x5b, 0x16, 0x38, 0xdd, 0x34, 0x25, 0x04,
9810
--	0x2b, 0x3a, 0xd9, 0xc9, 0x8b, 0x8a, 0x1f, 0x62, 0xf2, 0xa2, 0xd2, 0x29, 0x26, 0x2f, 0x5a, 0x87,
9811
--	0x91, 0x96, 0x1b, 0x63, 0xd2, 0x0e, 0x04, 0x6b, 0x97, 0xb9, 0x0e, 0x6f, 0x70, 0x94, 0xee, 0x84,
9812
--	0x19, 0x02, 0x80, 0x25, 0x11, 0xf4, 0x86, 0xda, 0x81, 0xc3, 0xf9, 0x92, 0x51, 0xf7, 0x7b, 0x5a,
9813
--	0xe6, 0x1e, 0x14, 0xc9, 0x8a, 0x46, 0x1e, 0x36, 0x59, 0xd1, 0x8a, 0x4c, 0x31, 0x34, 0x9a, 0x6f,
9814
--	0x3a, 0xce, 0x32, 0x08, 0xf5, 0x49, 0x2c, 0x64, 0x24, 0x63, 0x2a, 0x9f, 0x5c, 0x32, 0xa6, 0xef,
9815
--	0xb7, 0xe0, 0x5c, 0x3b, 0x2b, 0x2f, 0x99, 0x48, 0x0c, 0xf4, 0xf2, 0xc0, 0x89, 0xd7, 0x8c, 0x06,
9816
--	0x99, 0x88, 0x9c, 0x89, 0x86, 0xb3, 0x9b, 0xa3, 0x03, 0x1d, 0x6e, 0x36, 0x45, 0x36, 0xa1, 0xa7,
9817
--	0x72, 0xb2, 0x3a, 0xf5, 0xc8, 0xe5, 0xb4, 0x91, 0x91, 0x41, 0xe8, 0xe3, 0x79, 0x19, 0x84, 0x06,
9818
--	0xce, 0x1b, 0xf4, 0x86, 0xca, 0xe7, 0x34, 0x91, 0xbf, 0x94, 0x78, 0xb6, 0xa6, 0xbe, 0x59, 0x9c,
9819
--	0xde, 0x50, 0x59, 0x9c, 0x7a, 0xc4, 0x37, 0xe3, 0x39, 0x9a, 0xfa, 0xe6, 0x6e, 0xd2, 0xf2, 0x2f,
9820
--	0x4d, 0x9d, 0x4c, 0xfe, 0x25, 0xe3, 0xaa, 0xe1, 0x29, 0x80, 0x9e, 0xed, 0x73, 0xd5, 0x18, 0x74,
9821
--	0x7b, 0x5f, 0x36, 0x3c, 0xd7, 0xd4, 0xcc, 0x43, 0xe5, 0x9a, 0xba, 0xa7, 0xe7, 0x6e, 0x42, 0x7d,
9822
--	0x92, 0x13, 0x51, 0xa4, 0x01, 0x33, 0x36, 0xdd, 0xd3, 0x2f, 0xc0, 0x33, 0xf9, 0x74, 0xd5, 0x3d,
9823
--	0xd7, 0x4d, 0x37, 0xf3, 0x0a, 0xec, 0xca, 0x04, 0x75, 0xf6, 0x74, 0x32, 0x41, 0x9d, 0x3b, 0xf1,
9824
--	0x4c, 0x50, 0xe7, 0x4f, 0x21, 0x13, 0xd4, 0x63, 0x1f, 0x6a, 0x26, 0xa8, 0xd9, 0x47, 0x90, 0x09,
9825
--	0x6a, 0x3d, 0xc9, 0x04, 0x75, 0x21, 0x7f, 0x4a, 0x32, 0xec, 0x59, 0x73, 0xf2, 0x3f, 0xdd, 0x83,
9826
--	0x72, 0x5b, 0x46, 0x7a, 0x10, 0x01, 0xd8, 0xb2, 0x93, 0xd1, 0x66, 0x85, 0x83, 0xe0, 0x53, 0xa2,
9827
--	0x40, 0x38, 0x21, 0x45, 0xe9, 0x26, 0xf9, 0xa0, 0x1e, 0xef, 0xa1, 0x04, 0xcd, 0x52, 0x2f, 0xe5,
9828
--	0x67, 0x81, 0xb2, 0xff, 0x6a, 0x01, 0x2e, 0xf5, 0x5e, 0xd7, 0x89, 0x6e, 0xaa, 0x96, 0xbc, 0xa5,
9829
--	0xa4, 0x74, 0x53, 0x5c, 0xc8, 0x49, 0xb0, 0x06, 0x0e, 0x87, 0x73, 0x03, 0x66, 0x94, 0x21, 0xab,
9830
--	0xe7, 0x36, 0xf6, 0xb5, 0x24, 0xb5, 0xca, 0x61, 0xaf, 0x9e, 0x46, 0xc0, 0xdd, 0x75, 0xd0, 0x02,
9831
--	0x4c, 0x19, 0x85, 0xab, 0x55, 0x21, 0xcc, 0x28, 0x65, 0x58, 0xdd, 0x04, 0xe3, 0x34, 0xbe, 0xfd,
9832
--	0x73, 0x16, 0x3c, 0x96, 0x93, 0x24, 0x61, 0xe0, 0x68, 0x2f, 0x5b, 0x30, 0xd5, 0x36, 0xab, 0xf6,
9833
--	0x09, 0x0a, 0x65, 0xa4, 0x62, 0x50, 0x7d, 0x4d, 0x01, 0x70, 0x9a, 0xe8, 0xe2, 0xd5, 0xdf, 0xfa,
9834
--	0xfd, 0x4b, 0x1f, 0xfb, 0xed, 0xdf, 0xbf, 0xf4, 0xb1, 0xdf, 0xf9, 0xfd, 0x4b, 0x1f, 0xfb, 0xff,
9835
--	0x0f, 0x2f, 0x59, 0xbf, 0x75, 0x78, 0xc9, 0xfa, 0xed, 0xc3, 0x4b, 0xd6, 0xef, 0x1c, 0x5e, 0xb2,
9836
--	0x7e, 0xef, 0xf0, 0x92, 0xf5, 0xd5, 0x3f, 0xb8, 0xf4, 0xb1, 0xb7, 0x0b, 0x7b, 0x2f, 0xfc, 0xbf,
9837
--	0x00, 0x00, 0x00, 0xff, 0xff, 0x41, 0x99, 0x07, 0x31, 0x7e, 0xe5, 0x00, 0x00,
9838
-+	0x76, 0x18, 0xbc, 0xd5, 0xdd, 0x7c, 0xf4, 0xe1, 0xfb, 0xce, 0x8b, 0x43, 0xcd, 0x4c, 0x8f, 0x4a,
9839
-+	0xbb, 0xa3, 0xd1, 0x4a, 0x22, 0x57, 0x23, 0x69, 0x25, 0xaf, 0x76, 0x65, 0x93, 0x6c, 0x72, 0x86,
9840
-+	0x9a, 0x21, 0xa7, 0x75, 0x9b, 0x33, 0xda, 0x95, 0xb5, 0xeb, 0x2d, 0x76, 0x5f, 0x92, 0x25, 0x16,
9841
-+	0xab, 0x5a, 0x55, 0xd5, 0x9c, 0xa1, 0x3e, 0x1b, 0xf8, 0xb2, 0x8e, 0x9d, 0xf8, 0x81, 0x60, 0x11,
9842
-+	0x1b, 0x79, 0xd8, 0x86, 0x03, 0x38, 0x0e, 0x6c, 0xc7, 0x49, 0x10, 0xc7, 0x8e, 0xed, 0xec, 0xda,
9843
-+	0x89, 0xe3, 0x24, 0x80, 0xf3, 0x67, 0xe3, 0x04, 0x08, 0xd6, 0x80, 0x11, 0xc6, 0xa6, 0x8d, 0x04,
9844
-+	0xfe, 0x91, 0x07, 0xe2, 0xfc, 0x31, 0x63, 0xc4, 0xc1, 0x7d, 0xd6, 0xbd, 0xd5, 0x55, 0xdd, 0xcd,
9845
-+	0x11, 0x87, 0x92, 0x8d, 0xfd, 0xd7, 0x7d, 0xcf, 0xb9, 0xe7, 0xde, 0xba, 0xcf, 0x73, 0xce, 0x3d,
9846
-+	0x0f, 0x78, 0x6d, 0xe7, 0xd5, 0x68, 0xd6, 0x0d, 0xe6, 0x76, 0xda, 0x1b, 0x24, 0xf4, 0x49, 0x4c,
9847
-+	0xa2, 0xb9, 0x3d, 0xe2, 0x37, 0x83, 0x70, 0x4e, 0x00, 0x9c, 0x96, 0x3b, 0xd7, 0x08, 0x42, 0x32,
9848
-+	0xb7, 0xf7, 0xc2, 0xdc, 0x16, 0xf1, 0x49, 0xe8, 0xc4, 0xa4, 0x39, 0xdb, 0x0a, 0x83, 0x38, 0x40,
9849
-+	0x88, 0xe3, 0xcc, 0x3a, 0x2d, 0x77, 0x96, 0xe2, 0xcc, 0xee, 0xbd, 0x30, 0xf3, 0xfc, 0x96, 0x1b,
9850
-+	0x6f, 0xb7, 0x37, 0x66, 0x1b, 0xc1, 0xee, 0xdc, 0x56, 0xb0, 0x15, 0xcc, 0x31, 0xd4, 0x8d, 0xf6,
9851
-+	0x26, 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x9c, 0xc4, 0xcc, 0x6a, 0xd2, 0x0c, 0x79, 0x18, 0x13, 0x3f,
9852
-+	0x72, 0x03, 0x3f, 0x7a, 0xde, 0x69, 0xb9, 0x11, 0x09, 0xf7, 0x48, 0x38, 0xd7, 0xda, 0xd9, 0xa2,
9853
-+	0xb0, 0xc8, 0x44, 0x98, 0xdb, 0x7b, 0x61, 0x83, 0xc4, 0x4e, 0x47, 0x8f, 0x66, 0x5e, 0x4a, 0xc8,
9854
-+	0xed, 0x3a, 0x8d, 0x6d, 0xd7, 0x27, 0xe1, 0xbe, 0xa4, 0x31, 0x17, 0x92, 0x28, 0x68, 0x87, 0x0d,
9855
-+	0x72, 0xac, 0x5a, 0xd1, 0xdc, 0x2e, 0x89, 0x9d, 0x8c, 0xaf, 0x9f, 0x99, 0xcb, 0xab, 0x15, 0xb6,
9856
-+	0xfd, 0xd8, 0xdd, 0xed, 0x6c, 0xe6, 0xd3, 0xbd, 0x2a, 0x44, 0x8d, 0x6d, 0xb2, 0xeb, 0x74, 0xd4,
9857
-+	0x7b, 0x31, 0xaf, 0x5e, 0x3b, 0x76, 0xbd, 0x39, 0xd7, 0x8f, 0xa3, 0x38, 0x4c, 0x57, 0xb2, 0xbf,
9858
-+	0x69, 0xc1, 0xd5, 0xf9, 0xb7, 0xea, 0x4b, 0x9e, 0x13, 0xc5, 0x6e, 0x63, 0xc1, 0x0b, 0x1a, 0x3b,
9859
-+	0xf5, 0x38, 0x08, 0xc9, 0xfd, 0xc0, 0x6b, 0xef, 0x92, 0x3a, 0x1b, 0x08, 0xf4, 0x1c, 0x0c, 0xef,
9860
-+	0xb1, 0xff, 0x2b, 0xd5, 0x69, 0xeb, 0xaa, 0x75, 0xbd, 0xbc, 0x30, 0xf9, 0x5b, 0x07, 0x95, 0x8f,
9861
-+	0x1d, 0x1e, 0x54, 0x86, 0xef, 0x8b, 0x72, 0xac, 0x30, 0xd0, 0x35, 0x18, 0xdc, 0x8c, 0xd6, 0xf7,
9862
-+	0x5b, 0x64, 0xba, 0xc0, 0x70, 0xc7, 0x05, 0xee, 0xe0, 0x72, 0x9d, 0x96, 0x62, 0x01, 0x45, 0x73,
9863
-+	0x50, 0x6e, 0x39, 0x61, 0xec, 0xc6, 0x6e, 0xe0, 0x4f, 0x17, 0xaf, 0x5a, 0xd7, 0x07, 0x16, 0xa6,
9864
-+	0x04, 0x6a, 0xb9, 0x26, 0x01, 0x38, 0xc1, 0xa1, 0xdd, 0x08, 0x89, 0xd3, 0xbc, 0xeb, 0x7b, 0xfb,
9865
-+	0xd3, 0xa5, 0xab, 0xd6, 0xf5, 0xe1, 0xa4, 0x1b, 0x58, 0x94, 0x63, 0x85, 0x61, 0xff, 0x58, 0x01,
9866
-+	0x86, 0xe7, 0x37, 0x37, 0x5d, 0xdf, 0x8d, 0xf7, 0xd1, 0x7d, 0x18, 0xf5, 0x83, 0x26, 0x91, 0xff,
9867
-+	0xd9, 0x57, 0x8c, 0xdc, 0xb8, 0x3a, 0xdb, 0xb9, 0x32, 0x67, 0xd7, 0x34, 0xbc, 0x85, 0xc9, 0xc3,
9868
-+	0x83, 0xca, 0xa8, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x48, 0x2b, 0x68, 0x2a, 0xb2, 0x05, 0x46,
9869
-+	0xb6, 0x92, 0x45, 0xb6, 0x96, 0xa0, 0x2d, 0x4c, 0x1c, 0x1e, 0x54, 0x46, 0xb4, 0x02, 0xac, 0x13,
9870
-+	0x41, 0x1b, 0x30, 0x41, 0xff, 0xfa, 0xb1, 0xab, 0xe8, 0x16, 0x19, 0xdd, 0xa7, 0xf2, 0xe8, 0x6a,
9871
-+	0xa8, 0x0b, 0x67, 0x0e, 0x0f, 0x2a, 0x13, 0xa9, 0x42, 0x9c, 0x26, 0x68, 0xbf, 0x0f, 0xe3, 0xf3,
9872
-+	0x71, 0xec, 0x34, 0xb6, 0x49, 0x93, 0xcf, 0x20, 0x7a, 0x09, 0x4a, 0xbe, 0xb3, 0x4b, 0xc4, 0xfc,
9873
-+	0x5e, 0x15, 0x03, 0x5b, 0x5a, 0x73, 0x76, 0xc9, 0xd1, 0x41, 0x65, 0xf2, 0x9e, 0xef, 0xbe, 0xd7,
9874
-+	0x16, 0xab, 0x82, 0x96, 0x61, 0x86, 0x8d, 0x6e, 0x00, 0x34, 0xc9, 0x9e, 0xdb, 0x20, 0x35, 0x27,
9875
-+	0xde, 0x16, 0xf3, 0x8d, 0x44, 0x5d, 0xa8, 0x2a, 0x08, 0xd6, 0xb0, 0xec, 0x87, 0x50, 0x9e, 0xdf,
9876
-+	0x0b, 0xdc, 0x66, 0x2d, 0x68, 0x46, 0x68, 0x07, 0x26, 0x5a, 0x21, 0xd9, 0x24, 0xa1, 0x2a, 0x9a,
9877
-+	0xb6, 0xae, 0x16, 0xaf, 0x8f, 0xdc, 0xb8, 0x9e, 0xf9, 0xb1, 0x26, 0xea, 0x92, 0x1f, 0x87, 0xfb,
9878
-+	0x0b, 0x17, 0x44, 0x7b, 0x13, 0x29, 0x28, 0x4e, 0x53, 0xb6, 0xff, 0x75, 0x01, 0xce, 0xcd, 0xbf,
9879
-+	0xdf, 0x0e, 0x49, 0xd5, 0x8d, 0x76, 0xd2, 0x2b, 0xbc, 0xe9, 0x46, 0x3b, 0x6b, 0xc9, 0x08, 0xa8,
9880
-+	0xa5, 0x55, 0x15, 0xe5, 0x58, 0x61, 0xa0, 0xe7, 0x61, 0x88, 0xfe, 0xbe, 0x87, 0x57, 0xc4, 0x27,
9881
-+	0x9f, 0x11, 0xc8, 0x23, 0x55, 0x27, 0x76, 0xaa, 0x1c, 0x84, 0x25, 0x0e, 0x5a, 0x85, 0x91, 0x06,
9882
-+	0xdb, 0x90, 0x5b, 0xab, 0x41, 0x93, 0xb0, 0xc9, 0x2c, 0x2f, 0x3c, 0x4b, 0xd1, 0x17, 0x93, 0xe2,
9883
-+	0xa3, 0x83, 0xca, 0x34, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, 0x7f, 0x95,
9884
-+	0x18, 0x25, 0xc8, 0xd8, 0x5b, 0xd7, 0xb5, 0xad, 0x32, 0xc0, 0xb6, 0xca, 0x68, 0xf6, 0x36, 0x41,
9885
-+	0x2f, 0x40, 0x69, 0xc7, 0xf5, 0x9b, 0xd3, 0x83, 0x8c, 0xd6, 0x65, 0x3a, 0xe7, 0xb7, 0x5d, 0xbf,
9886
-+	0x79, 0x74, 0x50, 0x99, 0x32, 0xba, 0x43, 0x0b, 0x31, 0x43, 0xb5, 0xff, 0xd8, 0x82, 0x0a, 0x83,
9887
-+	0x2d, 0xbb, 0x1e, 0xa9, 0x91, 0x30, 0x72, 0xa3, 0x98, 0xf8, 0xb1, 0x31, 0xa0, 0x37, 0x00, 0x22,
9888
-+	0xd2, 0x08, 0x49, 0xac, 0x0d, 0xa9, 0x5a, 0x18, 0x75, 0x05, 0xc1, 0x1a, 0x16, 0x3d, 0x10, 0xa2,
9889
-+	0x6d, 0x27, 0x64, 0xeb, 0x4b, 0x0c, 0xac, 0x3a, 0x10, 0xea, 0x12, 0x80, 0x13, 0x1c, 0xe3, 0x40,
9890
-+	0x28, 0xf6, 0x3a, 0x10, 0xd0, 0xe7, 0x60, 0x22, 0x69, 0x2c, 0x6a, 0x39, 0x0d, 0x39, 0x80, 0x6c,
9891
-+	0xcb, 0xd4, 0x4d, 0x10, 0x4e, 0xe3, 0xda, 0x7f, 0xdf, 0x12, 0x8b, 0x87, 0x7e, 0xf5, 0x47, 0xfc,
9892
-+	0x5b, 0xed, 0x5f, 0xb5, 0x60, 0x68, 0xc1, 0xf5, 0x9b, 0xae, 0xbf, 0x85, 0xbe, 0x0c, 0xc3, 0xf4,
9893
-+	0x6e, 0x6a, 0x3a, 0xb1, 0x23, 0xce, 0xbd, 0x4f, 0x69, 0x7b, 0x4b, 0x5d, 0x15, 0xb3, 0xad, 0x9d,
9894
-+	0x2d, 0x5a, 0x10, 0xcd, 0x52, 0x6c, 0xba, 0xdb, 0xee, 0x6e, 0xbc, 0x4b, 0x1a, 0xf1, 0x2a, 0x89,
9895
-+	0x9d, 0xe4, 0x73, 0x92, 0x32, 0xac, 0xa8, 0xa2, 0xdb, 0x30, 0x18, 0x3b, 0xe1, 0x16, 0x89, 0xc5,
9896
-+	0x01, 0x98, 0x79, 0x50, 0xf1, 0x9a, 0x98, 0xee, 0x48, 0xe2, 0x37, 0x48, 0x72, 0x2d, 0xac, 0xb3,
9897
-+	0xaa, 0x58, 0x90, 0xb0, 0x7f, 0x70, 0x10, 0x2e, 0x2e, 0xd6, 0x57, 0x72, 0xd6, 0xd5, 0x35, 0x18,
9898
-+	0x6c, 0x86, 0xee, 0x1e, 0x09, 0xc5, 0x38, 0x2b, 0x2a, 0x55, 0x56, 0x8a, 0x05, 0x14, 0xbd, 0x0a,
9899
-+	0xa3, 0xfc, 0x42, 0xba, 0xe5, 0xf8, 0x4d, 0x4f, 0x0e, 0xf1, 0x59, 0x81, 0x3d, 0x7a, 0x5f, 0x83,
9900
-+	0x61, 0x03, 0xf3, 0x98, 0x8b, 0xea, 0x5a, 0x6a, 0x33, 0xe6, 0x5d, 0x76, 0x3f, 0x60, 0xc1, 0x24,
9901
-+	0x6f, 0x66, 0x3e, 0x8e, 0x43, 0x77, 0xa3, 0x1d, 0x93, 0x68, 0x7a, 0x80, 0x9d, 0x74, 0x8b, 0x59,
9902
-+	0xa3, 0x95, 0x3b, 0x02, 0xb3, 0xf7, 0x53, 0x54, 0xf8, 0x21, 0x38, 0x2d, 0xda, 0x9d, 0x4c, 0x83,
9903
-+	0x71, 0x47, 0xb3, 0xe8, 0x7b, 0x2d, 0x98, 0x69, 0x04, 0x7e, 0x1c, 0x06, 0x9e, 0x47, 0xc2, 0x5a,
9904
-+	0x7b, 0xc3, 0x73, 0xa3, 0x6d, 0xbe, 0x4e, 0x31, 0xd9, 0x64, 0x27, 0x41, 0xce, 0x1c, 0x2a, 0x24,
9905
-+	0x31, 0x87, 0x57, 0x0e, 0x0f, 0x2a, 0x33, 0x8b, 0xb9, 0xa4, 0x70, 0x97, 0x66, 0xd0, 0x0e, 0x20,
9906
-+	0x7a, 0x95, 0xd6, 0x63, 0x67, 0x8b, 0x24, 0x8d, 0x0f, 0xf5, 0xdf, 0xf8, 0xf9, 0xc3, 0x83, 0x0a,
9907
-+	0x5a, 0xeb, 0x20, 0x81, 0x33, 0xc8, 0xa2, 0xf7, 0xe0, 0x2c, 0x2d, 0xed, 0xf8, 0xd6, 0xe1, 0xfe,
9908
-+	0x9b, 0x9b, 0x3e, 0x3c, 0xa8, 0x9c, 0x5d, 0xcb, 0x20, 0x82, 0x33, 0x49, 0xcf, 0x2c, 0xc2, 0xb9,
9909
-+	0xcc, 0xa9, 0x42, 0x93, 0x50, 0xdc, 0x21, 0x9c, 0x05, 0x29, 0x63, 0xfa, 0x13, 0x9d, 0x85, 0x81,
9910
-+	0x3d, 0xc7, 0x6b, 0x8b, 0x55, 0x8a, 0xf9, 0x9f, 0xcf, 0x14, 0x5e, 0xb5, 0xec, 0x06, 0x8c, 0x2e,
9911
-+	0x3a, 0x2d, 0x67, 0xc3, 0xf5, 0xdc, 0xd8, 0x25, 0x11, 0x7a, 0x1a, 0x8a, 0x4e, 0xb3, 0xc9, 0xae,
9912
-+	0xc8, 0xf2, 0xc2, 0xb9, 0xc3, 0x83, 0x4a, 0x71, 0xbe, 0x49, 0xcf, 0x6a, 0x50, 0x58, 0xfb, 0x98,
9913
-+	0x62, 0xa0, 0x4f, 0x42, 0xa9, 0x19, 0x06, 0xad, 0xe9, 0x02, 0xc3, 0xa4, 0x43, 0x55, 0xaa, 0x86,
9914
-+	0x41, 0x2b, 0x85, 0xca, 0x70, 0x6c, 0x17, 0x2e, 0x2c, 0x3a, 0x51, 0xc3, 0x69, 0x76, 0xde, 0x8b,
9915
-+	0x74, 0xbb, 0xb9, 0xd1, 0x8e, 0xe2, 0xfb, 0x92, 0xed, 0xc6, 0x4a, 0xb1, 0x80, 0xf6, 0xcb, 0xf3,
9916
-+	0xd9, 0xbf, 0x51, 0x80, 0x4b, 0x8b, 0xa4, 0xb5, 0xbd, 0x5c, 0xcf, 0xd9, 0xdf, 0xd7, 0x61, 0x78,
9917
-+	0x37, 0xf0, 0xdd, 0x38, 0x08, 0x23, 0xf1, 0x95, 0xec, 0xe2, 0x5a, 0x15, 0x65, 0x58, 0x41, 0xd1,
9918
-+	0x55, 0x28, 0xb5, 0x12, 0xa6, 0x63, 0x54, 0x32, 0x2c, 0x8c, 0xdd, 0x60, 0x10, 0x8a, 0xd1, 0x8e,
9919
-+	0x48, 0x28, 0x2e, 0x5c, 0x85, 0x71, 0x2f, 0x22, 0x21, 0x66, 0x90, 0xe4, 0xe4, 0xa6, 0x67, 0xba,
9920
-+	0xd8, 0xc1, 0xa9, 0x93, 0x9b, 0x42, 0xb0, 0x86, 0x85, 0x6a, 0x50, 0x8e, 0xd4, 0xfa, 0x19, 0xe8,
9921
-+	0x7f, 0xfd, 0x8c, 0xb1, 0xa3, 0x5d, 0x2d, 0x9a, 0x84, 0x88, 0x71, 0xe2, 0x0c, 0xf6, 0x3c, 0xda,
9922
-+	0xbf, 0x5e, 0x00, 0xc4, 0x87, 0xf0, 0xcf, 0xd9, 0xc0, 0xdd, 0xeb, 0x1c, 0xb8, 0x4c, 0x26, 0xef,
9923
-+	0x4e, 0xd0, 0x70, 0xbc, 0xf4, 0x6d, 0x71, 0x52, 0xa3, 0xf7, 0xbf, 0x2d, 0xb8, 0xb4, 0xe8, 0xfa,
9924
-+	0x4d, 0x12, 0xe6, 0x2c, 0xc0, 0xc7, 0x23, 0xeb, 0x1c, 0xef, 0x52, 0x31, 0x96, 0x58, 0xe9, 0x04,
9925
-+	0x96, 0x98, 0xfd, 0x3f, 0x2c, 0x40, 0xfc, 0xb3, 0x3f, 0x72, 0x1f, 0x7b, 0xaf, 0xf3, 0x63, 0x4f,
9926
-+	0x60, 0x59, 0xd8, 0x77, 0x60, 0x7c, 0xd1, 0x73, 0x89, 0x1f, 0xaf, 0xd4, 0x16, 0x03, 0x7f, 0xd3,
9927
-+	0xdd, 0x42, 0x9f, 0x81, 0x71, 0x2a, 0x3e, 0x07, 0xed, 0xb8, 0x4e, 0x1a, 0x81, 0xcf, 0x24, 0x0d,
9928
-+	0x2a, 0x74, 0xa2, 0xc3, 0x83, 0xca, 0xf8, 0xba, 0x01, 0xc1, 0x29, 0x4c, 0xfb, 0x77, 0xe9, 0xf8,
9929
-+	0x05, 0xbb, 0xad, 0xc0, 0x27, 0x7e, 0xbc, 0x18, 0xf8, 0x4d, 0x2e, 0x91, 0x7e, 0x06, 0x4a, 0x31,
9930
-+	0x1d, 0x0f, 0x3e, 0x76, 0xd7, 0xe4, 0x46, 0xa1, 0xa3, 0x70, 0x74, 0x50, 0x39, 0xdf, 0x59, 0x83,
9931
-+	0x8d, 0x13, 0xab, 0x83, 0xbe, 0x0d, 0x06, 0xa3, 0xd8, 0x89, 0xdb, 0x91, 0x18, 0xcd, 0x27, 0xe5,
9932
-+	0x68, 0xd6, 0x59, 0xe9, 0xd1, 0x41, 0x65, 0x42, 0x55, 0xe3, 0x45, 0x58, 0x54, 0x40, 0xcf, 0xc0,
9933
-+	0xd0, 0x2e, 0x89, 0x22, 0x67, 0x4b, 0x0a, 0x13, 0x13, 0xa2, 0xee, 0xd0, 0x2a, 0x2f, 0xc6, 0x12,
9934
-+	0x8e, 0x9e, 0x82, 0x01, 0x12, 0x86, 0x41, 0x28, 0xf6, 0xe8, 0x98, 0x40, 0x1c, 0x58, 0xa2, 0x85,
9935
-+	0x98, 0xc3, 0xec, 0x7f, 0x67, 0xc1, 0x84, 0xea, 0x2b, 0x6f, 0xeb, 0x14, 0xb8, 0xc6, 0xb7, 0x01,
9936
-+	0x1a, 0xf2, 0x03, 0x23, 0x76, 0x51, 0x8d, 0xdc, 0xb8, 0x96, 0xc9, 0x0b, 0x75, 0x0c, 0x63, 0x42,
9937
-+	0x59, 0x15, 0x45, 0x58, 0xa3, 0x66, 0xff, 0xba, 0x05, 0x67, 0x52, 0x5f, 0x74, 0xc7, 0x8d, 0x62,
9938
-+	0xf4, 0x4e, 0xc7, 0x57, 0xcd, 0xf6, 0xf7, 0x55, 0xb4, 0x36, 0xfb, 0x26, 0xb5, 0x94, 0x65, 0x89,
9939
-+	0xf6, 0x45, 0xb7, 0x60, 0xc0, 0x8d, 0xc9, 0xae, 0xfc, 0x98, 0xa7, 0xba, 0x7e, 0x0c, 0xef, 0x55,
9940
-+	0x32, 0x23, 0x2b, 0xb4, 0x26, 0xe6, 0x04, 0xec, 0x1f, 0x29, 0x42, 0x99, 0x2f, 0xdb, 0x55, 0xa7,
9941
-+	0x75, 0x0a, 0x73, 0xb1, 0x02, 0x25, 0x46, 0x9d, 0x77, 0xfc, 0xe9, 0xec, 0x8e, 0x8b, 0xee, 0xcc,
9942
-+	0x52, 0x91, 0x90, 0x73, 0x9d, 0xea, 0x6a, 0xa0, 0x45, 0x98, 0x91, 0x40, 0x0e, 0xc0, 0x86, 0xeb,
9943
-+	0x3b, 0xe1, 0x3e, 0x2d, 0x9b, 0x2e, 0x32, 0x82, 0xcf, 0x77, 0x27, 0xb8, 0xa0, 0xf0, 0x39, 0x59,
9944
-+	0xd5, 0xd7, 0x04, 0x80, 0x35, 0xa2, 0x33, 0xaf, 0x40, 0x59, 0x21, 0x1f, 0x87, 0x9d, 0x9a, 0xf9,
9945
-+	0x1c, 0x4c, 0xa4, 0xda, 0xea, 0x55, 0x7d, 0x54, 0xe7, 0xc6, 0xbe, 0xc6, 0x4e, 0x01, 0xd1, 0xeb,
9946
-+	0x25, 0x7f, 0x4f, 0x9c, 0xa2, 0xef, 0xc3, 0x59, 0x2f, 0xe3, 0x70, 0x12, 0x53, 0xd5, 0xff, 0x61,
9947
-+	0x76, 0x49, 0x7c, 0xf6, 0xd9, 0x2c, 0x28, 0xce, 0x6c, 0x83, 0x5e, 0xfb, 0x41, 0x8b, 0xae, 0x79,
9948
-+	0xc7, 0x63, 0xfd, 0x15, 0x82, 0xfe, 0x5d, 0x51, 0x86, 0x15, 0x94, 0x1e, 0x61, 0x67, 0x55, 0xe7,
9949
-+	0x6f, 0x93, 0xfd, 0x3a, 0xf1, 0x48, 0x23, 0x0e, 0xc2, 0x0f, 0xb5, 0xfb, 0x97, 0xf9, 0xe8, 0xf3,
9950
-+	0x13, 0x70, 0x44, 0x10, 0x28, 0xde, 0x26, 0xfb, 0x7c, 0x2a, 0xf4, 0xaf, 0x2b, 0x76, 0xfd, 0xba,
9951
-+	0x5f, 0xb0, 0x60, 0x4c, 0x7d, 0xdd, 0x29, 0x6c, 0xf5, 0x05, 0x73, 0xab, 0x5f, 0xee, 0xba, 0xc0,
9952
-+	0x73, 0x36, 0xf9, 0xd7, 0x0b, 0x70, 0x51, 0xe1, 0x50, 0xc9, 0x82, 0xff, 0x11, 0xab, 0x6a, 0x0e,
9953
-+	0xca, 0xbe, 0x52, 0x54, 0x58, 0xa6, 0x86, 0x20, 0x51, 0x53, 0x24, 0x38, 0x94, 0x6b, 0xf3, 0x13,
9954
-+	0x6d, 0xc2, 0xa8, 0xae, 0xc1, 0x13, 0xda, 0xba, 0x05, 0x28, 0xb6, 0xdd, 0xa6, 0xb8, 0x33, 0x3e,
9955
-+	0x25, 0x47, 0xfb, 0xde, 0x4a, 0xf5, 0xe8, 0xa0, 0xf2, 0x64, 0x9e, 0xf6, 0x98, 0x5e, 0x56, 0xd1,
9956
-+	0xec, 0xbd, 0x95, 0x2a, 0xa6, 0x95, 0xd1, 0x3c, 0x4c, 0x48, 0x05, 0xf9, 0x7d, 0xca, 0x41, 0x05,
9957
-+	0xbe, 0xb8, 0x5a, 0x94, 0x1a, 0x0e, 0x9b, 0x60, 0x9c, 0xc6, 0x47, 0x55, 0x98, 0xdc, 0x69, 0x6f,
9958
-+	0x10, 0x8f, 0xc4, 0xfc, 0x83, 0x6f, 0x13, 0xae, 0xa4, 0x2a, 0x27, 0x52, 0xec, 0xed, 0x14, 0x1c,
9959
-+	0x77, 0xd4, 0xb0, 0xff, 0x8c, 0x1d, 0xf1, 0x62, 0xf4, 0x6a, 0x61, 0x40, 0x17, 0x16, 0xa5, 0xfe,
9960
-+	0x61, 0x2e, 0xe7, 0x7e, 0x56, 0xc5, 0x6d, 0xb2, 0xbf, 0x1e, 0x50, 0x66, 0x3b, 0x7b, 0x55, 0x18,
9961
-+	0x6b, 0xbe, 0xd4, 0x75, 0xcd, 0xff, 0x52, 0x01, 0xce, 0xa9, 0x11, 0x30, 0xf8, 0xba, 0x3f, 0xef,
9962
-+	0x63, 0xf0, 0x02, 0x8c, 0x34, 0xc9, 0xa6, 0xd3, 0xf6, 0x62, 0xa5, 0x31, 0x1d, 0xe0, 0x5a, 0xf3,
9963
-+	0x6a, 0x52, 0x8c, 0x75, 0x9c, 0x63, 0x0c, 0xdb, 0x4f, 0x8f, 0xb0, 0xbb, 0x35, 0x76, 0xe8, 0x1a,
9964
-+	0x57, 0xbb, 0xc6, 0xca, 0xdd, 0x35, 0x4f, 0xc1, 0x80, 0xbb, 0x4b, 0x79, 0xad, 0x82, 0xc9, 0x42,
9965
-+	0xad, 0xd0, 0x42, 0xcc, 0x61, 0xe8, 0x13, 0x30, 0xd4, 0x08, 0x76, 0x77, 0x1d, 0xbf, 0xc9, 0xae,
9966
-+	0xbc, 0xf2, 0xc2, 0x08, 0x65, 0xc7, 0x16, 0x79, 0x11, 0x96, 0x30, 0x74, 0x09, 0x4a, 0x4e, 0xb8,
9967
-+	0x15, 0x4d, 0x97, 0x18, 0xce, 0x30, 0x6d, 0x69, 0x3e, 0xdc, 0x8a, 0x30, 0x2b, 0xa5, 0x52, 0xd5,
9968
-+	0x83, 0x20, 0xdc, 0x71, 0xfd, 0xad, 0xaa, 0x1b, 0x8a, 0x2d, 0xa1, 0xee, 0xc2, 0xb7, 0x14, 0x04,
9969
-+	0x6b, 0x58, 0x68, 0x19, 0x06, 0x5a, 0x41, 0x18, 0x47, 0xd3, 0x83, 0x6c, 0xb8, 0x9f, 0xcc, 0x39,
9970
-+	0x88, 0xf8, 0xd7, 0xd6, 0x82, 0x30, 0x4e, 0x3e, 0x80, 0xfe, 0x8b, 0x30, 0xaf, 0x8e, 0xbe, 0x0d,
9971
-+	0x8a, 0xc4, 0xdf, 0x9b, 0x1e, 0x62, 0x54, 0x66, 0xb2, 0xa8, 0x2c, 0xf9, 0x7b, 0xf7, 0x9d, 0x30,
9972
-+	0x39, 0xa5, 0x97, 0xfc, 0x3d, 0x4c, 0xeb, 0xa0, 0x2f, 0x40, 0x59, 0x6e, 0xf1, 0x48, 0x68, 0x54,
9973
-+	0x32, 0x97, 0x98, 0x3c, 0x18, 0x30, 0x79, 0xaf, 0xed, 0x86, 0x64, 0x97, 0xf8, 0x71, 0x94, 0x9c,
9974
-+	0x69, 0x12, 0x1a, 0xe1, 0x84, 0x1a, 0xfa, 0x82, 0x54, 0xe3, 0xad, 0x06, 0x6d, 0x3f, 0x8e, 0xa6,
9975
-+	0xcb, 0xac, 0x7b, 0x99, 0x0f, 0x2c, 0xf7, 0x13, 0xbc, 0xb4, 0x9e, 0x8f, 0x57, 0xc6, 0x06, 0x29,
9976
-+	0x84, 0x61, 0xcc, 0x73, 0xf7, 0x88, 0x4f, 0xa2, 0xa8, 0x16, 0x06, 0x1b, 0x64, 0x1a, 0x58, 0xcf,
9977
-+	0x2f, 0x66, 0xbf, 0x3b, 0x04, 0x1b, 0x64, 0x61, 0xea, 0xf0, 0xa0, 0x32, 0x76, 0x47, 0xaf, 0x83,
9978
-+	0x4d, 0x12, 0xe8, 0x1e, 0x8c, 0x53, 0xb9, 0xc6, 0x4d, 0x88, 0x8e, 0xf4, 0x22, 0xca, 0xa4, 0x0f,
9979
-+	0x6c, 0x54, 0xc2, 0x29, 0x22, 0xe8, 0x0d, 0x28, 0x7b, 0xee, 0x26, 0x69, 0xec, 0x37, 0x3c, 0x32,
9980
-+	0x3d, 0xca, 0x28, 0x66, 0x6e, 0xab, 0x3b, 0x12, 0x89, 0xcb, 0x45, 0xea, 0x2f, 0x4e, 0xaa, 0xa3,
9981
-+	0xfb, 0x70, 0x3e, 0x26, 0xe1, 0xae, 0xeb, 0x3b, 0x74, 0x3b, 0x08, 0x79, 0x81, 0xbd, 0xde, 0x8c,
9982
-+	0xb1, 0xf5, 0x76, 0x45, 0x0c, 0xdd, 0xf9, 0xf5, 0x4c, 0x2c, 0x9c, 0x53, 0x1b, 0xdd, 0x85, 0x09,
9983
-+	0xb6, 0x13, 0x6a, 0x6d, 0xcf, 0xab, 0x05, 0x9e, 0xdb, 0xd8, 0x9f, 0x1e, 0x67, 0x04, 0x3f, 0x21,
9984
-+	0xef, 0x85, 0x15, 0x13, 0x7c, 0x74, 0x50, 0x81, 0xe4, 0x1f, 0x4e, 0xd7, 0x46, 0x1b, 0x4c, 0x5d,
9985
-+	0xdf, 0x0e, 0xdd, 0x78, 0x9f, 0xae, 0x5f, 0xf2, 0x30, 0x9e, 0x9e, 0xe8, 0x2a, 0x0a, 0xeb, 0xa8,
9986
-+	0x4a, 0xa7, 0xaf, 0x17, 0xe2, 0x34, 0x41, 0xba, 0xb5, 0xa3, 0xb8, 0xe9, 0xfa, 0xd3, 0x93, 0xec,
9987
-+	0xc4, 0x50, 0x3b, 0xa3, 0x4e, 0x0b, 0x31, 0x87, 0x31, 0x55, 0x3d, 0xfd, 0x71, 0x97, 0x9e, 0xa0,
9988
-+	0x53, 0x0c, 0x31, 0x51, 0xd5, 0x4b, 0x00, 0x4e, 0x70, 0x28, 0x53, 0x13, 0xc7, 0xfb, 0xd3, 0x88,
9989
-+	0xa1, 0xaa, 0xed, 0xb2, 0xbe, 0xfe, 0x05, 0x4c, 0xcb, 0xd1, 0x1d, 0x18, 0x22, 0xfe, 0xde, 0x72,
9990
-+	0x18, 0xec, 0x4e, 0x9f, 0xc9, 0xdf, 0xb3, 0x4b, 0x1c, 0x85, 0x1f, 0xe8, 0x89, 0x80, 0x27, 0x8a,
9991
-+	0xb1, 0x24, 0x81, 0x1e, 0xc2, 0x74, 0xc6, 0x8c, 0xf0, 0x09, 0x38, 0xcb, 0x26, 0xe0, 0xb3, 0xa2,
9992
-+	0xee, 0xf4, 0x7a, 0x0e, 0xde, 0x51, 0x17, 0x18, 0xce, 0xa5, 0x8e, 0xbe, 0x08, 0x63, 0x7c, 0x43,
9993
-+	0xf1, 0x77, 0xbe, 0x68, 0xfa, 0x1c, 0xfb, 0x9a, 0xab, 0xf9, 0x9b, 0x93, 0x23, 0x2e, 0x9c, 0x13,
9994
-+	0x1d, 0x1a, 0xd3, 0x4b, 0x23, 0x6c, 0x52, 0xb3, 0x37, 0x60, 0x5c, 0x9d, 0x5b, 0x6c, 0xe9, 0xa0,
9995
-+	0x0a, 0x0c, 0x30, 0x6e, 0x47, 0xe8, 0xb7, 0xca, 0x74, 0xa6, 0x18, 0x27, 0x84, 0x79, 0x39, 0x9b,
9996
-+	0x29, 0xf7, 0x7d, 0xb2, 0xb0, 0x1f, 0x13, 0x2e, 0x55, 0x17, 0xb5, 0x99, 0x92, 0x00, 0x9c, 0xe0,
9997
-+	0xd8, 0xff, 0x97, 0x73, 0x8d, 0xc9, 0xe1, 0xd8, 0xc7, 0x75, 0xf0, 0x1c, 0x0c, 0x6f, 0x07, 0x51,
9998
-+	0x4c, 0xb1, 0x59, 0x1b, 0x03, 0x09, 0x9f, 0x78, 0x4b, 0x94, 0x63, 0x85, 0x81, 0x5e, 0x83, 0xb1,
9999
-+	0x86, 0xde, 0x80, 0xb8, 0xcb, 0xd4, 0x10, 0x18, 0xad, 0x63, 0x13, 0x17, 0xbd, 0x0a, 0xc3, 0xec,
10000
-+	0x95, 0xbe, 0x11, 0x78, 0x82, 0xc9, 0x92, 0x17, 0xf2, 0x70, 0x4d, 0x94, 0x1f, 0x69, 0xbf, 0xb1,
10001
-+	0xc2, 0x46, 0xd7, 0x60, 0x90, 0x76, 0x61, 0xa5, 0x26, 0x6e, 0x11, 0xa5, 0xaa, 0xb9, 0xc5, 0x4a,
10002
-+	0xb1, 0x80, 0xda, 0x7f, 0xbd, 0xa0, 0x8d, 0x32, 0x95, 0x48, 0x09, 0xaa, 0xc1, 0xd0, 0x03, 0xc7,
10003
-+	0x8d, 0x5d, 0x7f, 0x4b, 0xb0, 0x0b, 0xcf, 0x74, 0xbd, 0x52, 0x58, 0xa5, 0xb7, 0x78, 0x05, 0x7e,
10004
-+	0xe9, 0x89, 0x3f, 0x58, 0x92, 0xa1, 0x14, 0xc3, 0xb6, 0xef, 0x53, 0x8a, 0x85, 0x7e, 0x29, 0x62,
10005
-+	0x5e, 0x81, 0x53, 0x14, 0x7f, 0xb0, 0x24, 0x83, 0xde, 0x01, 0x90, 0xcb, 0x92, 0x34, 0xc5, 0xeb,
10006
-+	0xf8, 0x73, 0xbd, 0x89, 0xae, 0xab, 0x3a, 0x0b, 0xe3, 0xf4, 0x4a, 0x4d, 0xfe, 0x63, 0x8d, 0x9e,
10007
-+	0x1d, 0x33, 0xb6, 0xaa, 0xb3, 0x33, 0xe8, 0x3b, 0xe9, 0x49, 0xe0, 0x84, 0x31, 0x69, 0xce, 0xc7,
10008
-+	0x62, 0x70, 0x3e, 0xd9, 0x9f, 0x4c, 0xb1, 0xee, 0xee, 0x12, 0xfd, 0xd4, 0x10, 0x44, 0x70, 0x42,
10009
-+	0xcf, 0xfe, 0x95, 0x22, 0x4c, 0xe7, 0x75, 0x97, 0x2e, 0x3a, 0xf2, 0xd0, 0x8d, 0x17, 0x29, 0x37,
10010
-+	0x64, 0x99, 0x8b, 0x6e, 0x49, 0x94, 0x63, 0x85, 0x41, 0x67, 0x3f, 0x72, 0xb7, 0xa4, 0x48, 0x38,
10011
-+	0x90, 0xcc, 0x7e, 0x9d, 0x95, 0x62, 0x01, 0xa5, 0x78, 0x21, 0x71, 0x22, 0x61, 0x7e, 0xa1, 0xad,
10012
-+	0x12, 0xcc, 0x4a, 0xb1, 0x80, 0xea, 0xfa, 0xa6, 0x52, 0x0f, 0x7d, 0x93, 0x31, 0x44, 0x03, 0x27,
10013
-+	0x3b, 0x44, 0xe8, 0x4b, 0x00, 0x9b, 0xae, 0xef, 0x46, 0xdb, 0x8c, 0xfa, 0xe0, 0xb1, 0xa9, 0x2b,
10014
-+	0x5e, 0x6a, 0x59, 0x51, 0xc1, 0x1a, 0x45, 0xf4, 0x32, 0x8c, 0xa8, 0x0d, 0xb8, 0x52, 0x65, 0x6f,
10015
-+	0x51, 0xda, 0xdb, 0x7e, 0x72, 0x1a, 0x55, 0xb1, 0x8e, 0x67, 0xbf, 0x9b, 0x5e, 0x2f, 0x62, 0x07,
10016
-+	0x68, 0xe3, 0x6b, 0xf5, 0x3b, 0xbe, 0x85, 0xee, 0xe3, 0x6b, 0xff, 0x66, 0x11, 0x26, 0x8c, 0xc6,
10017
-+	0xda, 0x51, 0x1f, 0x67, 0xd6, 0x4d, 0x7a, 0xcf, 0x39, 0x31, 0x11, 0xfb, 0xcf, 0xee, 0xbd, 0x55,
10018
-+	0xf4, 0xbb, 0x90, 0xee, 0x00, 0x5e, 0x1f, 0x7d, 0x09, 0xca, 0x9e, 0x13, 0x31, 0xdd, 0x15, 0x11,
10019
-+	0xfb, 0xae, 0x1f, 0x62, 0x89, 0x1c, 0xe1, 0x44, 0xb1, 0x76, 0xd5, 0x70, 0xda, 0x09, 0x49, 0x7a,
10020
-+	0x21, 0x53, 0xde, 0x47, 0xda, 0xf7, 0xa8, 0x4e, 0x50, 0x06, 0x69, 0x1f, 0x73, 0x18, 0x7a, 0x15,
10021
-+	0x46, 0x43, 0xc2, 0x56, 0xc5, 0x22, 0x65, 0xe5, 0xd8, 0x32, 0x1b, 0x48, 0x78, 0x3e, 0xac, 0xc1,
10022
-+	0xb0, 0x81, 0x99, 0xb0, 0xf2, 0x83, 0x5d, 0x58, 0xf9, 0x67, 0x60, 0x88, 0xfd, 0x50, 0x2b, 0x40,
10023
-+	0xcd, 0xc6, 0x0a, 0x2f, 0xc6, 0x12, 0x9e, 0x5e, 0x30, 0xc3, 0x7d, 0x2e, 0x98, 0x4f, 0xc2, 0x78,
10024
-+	0xd5, 0x21, 0xbb, 0x81, 0xbf, 0xe4, 0x37, 0x5b, 0x81, 0xeb, 0xc7, 0x68, 0x1a, 0x4a, 0xec, 0x76,
10025
-+	0xe0, 0x7b, 0xbb, 0x44, 0x29, 0xe0, 0x12, 0x65, 0xcc, 0xed, 0x2d, 0x38, 0x57, 0x0d, 0x1e, 0xf8,
10026
-+	0x0f, 0x9c, 0xb0, 0x39, 0x5f, 0x5b, 0xd1, 0xe4, 0xdc, 0x35, 0x29, 0x67, 0x71, 0x7b, 0x99, 0xcc,
10027
-+	0x33, 0x55, 0xab, 0xc9, 0xef, 0xda, 0x65, 0xd7, 0x23, 0x39, 0xda, 0x88, 0xbf, 0x59, 0x30, 0x5a,
10028
-+	0x4a, 0xf0, 0xd5, 0x83, 0x91, 0x95, 0xfb, 0x60, 0xf4, 0x26, 0x0c, 0x6f, 0xba, 0xc4, 0x6b, 0x62,
10029
-+	0xb2, 0x29, 0x96, 0xd8, 0xd3, 0xf9, 0x26, 0x00, 0xcb, 0x14, 0x53, 0x6a, 0x9f, 0xb8, 0x94, 0xb6,
10030
-+	0x2c, 0x2a, 0x63, 0x45, 0x06, 0xed, 0xc0, 0xa4, 0x14, 0x03, 0x24, 0x54, 0x2c, 0xb8, 0x67, 0xba,
10031
-+	0xc9, 0x16, 0x26, 0xf1, 0xb3, 0x87, 0x07, 0x95, 0x49, 0x9c, 0x22, 0x83, 0x3b, 0x08, 0x53, 0xb1,
10032
-+	0x6c, 0x97, 0x1e, 0xad, 0x25, 0x36, 0xfc, 0x4c, 0x2c, 0x63, 0x12, 0x26, 0x2b, 0xb5, 0x7f, 0xc2,
10033
-+	0x82, 0x0b, 0x1d, 0x23, 0x23, 0x24, 0xed, 0x13, 0x9e, 0x85, 0xb4, 0xe4, 0x5b, 0xe8, 0x2d, 0xf9,
10034
-+	0xda, 0xff, 0xc0, 0x82, 0xb3, 0x4b, 0xbb, 0xad, 0x78, 0xbf, 0xea, 0x9a, 0xaf, 0x3b, 0xaf, 0xc0,
10035
-+	0xe0, 0x2e, 0x69, 0xba, 0xed, 0x5d, 0x31, 0x73, 0x15, 0x79, 0xfc, 0xac, 0xb2, 0xd2, 0xa3, 0x83,
10036
-+	0xca, 0x58, 0x3d, 0x0e, 0x42, 0x67, 0x8b, 0xf0, 0x02, 0x2c, 0xd0, 0xd9, 0x21, 0xee, 0xbe, 0x4f,
10037
-+	0xee, 0xb8, 0xbb, 0xae, 0x34, 0xe9, 0xe8, 0xaa, 0x3b, 0x9b, 0x95, 0x03, 0x3a, 0xfb, 0x66, 0xdb,
10038
-+	0xf1, 0x63, 0x37, 0xde, 0x17, 0x0f, 0x33, 0x92, 0x08, 0x4e, 0xe8, 0xd9, 0xdf, 0xb4, 0x60, 0x42,
10039
-+	0xae, 0xfb, 0xf9, 0x66, 0x33, 0x24, 0x51, 0x84, 0x66, 0xa0, 0xe0, 0xb6, 0x44, 0x2f, 0x41, 0xf4,
10040
-+	0xb2, 0xb0, 0x52, 0xc3, 0x05, 0xb7, 0x85, 0x6a, 0x50, 0xe6, 0x96, 0x21, 0xc9, 0xe2, 0xea, 0xcb,
10041
-+	0xbe, 0x84, 0xf5, 0x60, 0x5d, 0xd6, 0xc4, 0x09, 0x11, 0xc9, 0xc1, 0xb1, 0x33, 0xb3, 0x68, 0xbe,
10042
-+	0x7a, 0xdd, 0x12, 0xe5, 0x58, 0x61, 0xa0, 0xeb, 0x30, 0xec, 0x07, 0x4d, 0x6e, 0xa8, 0xc3, 0x6f,
10043
-+	0x3f, 0xb6, 0x64, 0xd7, 0x44, 0x19, 0x56, 0x50, 0xfb, 0x87, 0x2d, 0x18, 0x95, 0x5f, 0xd6, 0x27,
10044
-+	0x33, 0x49, 0xb7, 0x56, 0xc2, 0x48, 0x26, 0x5b, 0x8b, 0x32, 0x83, 0x0c, 0x62, 0xf0, 0x80, 0xc5,
10045
-+	0xe3, 0xf0, 0x80, 0xf6, 0x8f, 0x17, 0x60, 0x5c, 0x76, 0xa7, 0xde, 0xde, 0x88, 0x48, 0x8c, 0xd6,
10046
-+	0xa1, 0xec, 0xf0, 0x21, 0x27, 0x72, 0xc5, 0x3e, 0x95, 0x2d, 0x7c, 0x18, 0xf3, 0x93, 0x5c, 0xcb,
10047
-+	0xf3, 0xb2, 0x36, 0x4e, 0x08, 0x21, 0x0f, 0xa6, 0xfc, 0x20, 0x66, 0x47, 0xb4, 0x82, 0x77, 0x7b,
10048
-+	0x02, 0x49, 0x53, 0xbf, 0x28, 0xa8, 0x4f, 0xad, 0xa5, 0xa9, 0xe0, 0x4e, 0xc2, 0x68, 0x49, 0x2a,
10049
-+	0x3c, 0x8a, 0xf9, 0xe2, 0x86, 0x3e, 0x0b, 0xd9, 0xfa, 0x0e, 0xfb, 0xd7, 0x2c, 0x28, 0x4b, 0xb4,
10050
-+	0xd3, 0x78, 0xed, 0x5a, 0x85, 0xa1, 0x88, 0x4d, 0x82, 0x1c, 0x1a, 0xbb, 0x5b, 0xc7, 0xf9, 0x7c,
10051
-+	0x25, 0x37, 0x0f, 0xff, 0x1f, 0x61, 0x49, 0x83, 0xe9, 0xbb, 0x55, 0xf7, 0x3f, 0x22, 0xfa, 0x6e,
10052
-+	0xd5, 0x9f, 0x9c, 0x1b, 0xe6, 0xbf, 0xb2, 0x3e, 0x6b, 0x62, 0x2d, 0x65, 0x90, 0x5a, 0x21, 0xd9,
10053
-+	0x74, 0x1f, 0xa6, 0x19, 0xa4, 0x1a, 0x2b, 0xc5, 0x02, 0x8a, 0xde, 0x81, 0xd1, 0x86, 0x54, 0x74,
10054
-+	0x26, 0xc7, 0xc0, 0xb5, 0xae, 0x4a, 0x77, 0xf5, 0x3e, 0xc3, 0x8d, 0x78, 0x17, 0xb5, 0xfa, 0xd8,
10055
-+	0xa0, 0x66, 0x3e, 0xb7, 0x17, 0x7b, 0x3d, 0xb7, 0x27, 0x74, 0xf3, 0x1f, 0x9f, 0x7f, 0xd2, 0x82,
10056
-+	0x41, 0xae, 0x2e, 0xeb, 0x4f, 0xbf, 0xa8, 0x3d, 0x57, 0x25, 0x63, 0x77, 0x9f, 0x16, 0x8a, 0xe7,
10057
-+	0x27, 0xb4, 0x0a, 0x65, 0xf6, 0x83, 0xa9, 0x0d, 0x8a, 0xf9, 0xd6, 0xcb, 0xbc, 0x55, 0xbd, 0x83,
10058
-+	0xf7, 0x65, 0x35, 0x9c, 0x50, 0xb0, 0x7f, 0xb4, 0x48, 0x8f, 0xaa, 0x04, 0xd5, 0xb8, 0xc1, 0xad,
10059
-+	0xc7, 0x77, 0x83, 0x17, 0x1e, 0xd7, 0x0d, 0xbe, 0x05, 0x13, 0x0d, 0xed, 0x71, 0x2b, 0x99, 0xc9,
10060
-+	0xeb, 0x5d, 0x17, 0x89, 0xf6, 0x0e, 0xc6, 0x55, 0x46, 0x8b, 0x26, 0x11, 0x9c, 0xa6, 0x8a, 0xbe,
10061
-+	0x13, 0x46, 0xf9, 0x3c, 0x8b, 0x56, 0xb8, 0xc5, 0xc2, 0x27, 0xf2, 0xd7, 0x8b, 0xde, 0x04, 0x5b,
10062
-+	0x89, 0x75, 0xad, 0x3a, 0x36, 0x88, 0xd9, 0xbf, 0x32, 0x0c, 0x03, 0x4b, 0x7b, 0xc4, 0x8f, 0x4f,
10063
-+	0xe1, 0x40, 0x6a, 0xc0, 0xb8, 0xeb, 0xef, 0x05, 0xde, 0x1e, 0x69, 0x72, 0xf8, 0x71, 0x2e, 0xd7,
10064
-+	0xf3, 0x82, 0xf4, 0xf8, 0x8a, 0x41, 0x02, 0xa7, 0x48, 0x3e, 0x0e, 0x09, 0xf3, 0x26, 0x0c, 0xf2,
10065
-+	0xb9, 0x17, 0xe2, 0x65, 0xa6, 0x32, 0x98, 0x0d, 0xa2, 0xd8, 0x05, 0x89, 0xf4, 0xcb, 0xb5, 0xcf,
10066
-+	0xa2, 0x3a, 0x7a, 0x17, 0xc6, 0x37, 0xdd, 0x30, 0x8a, 0xa9, 0x68, 0x18, 0xc5, 0xce, 0x6e, 0xeb,
10067
-+	0x11, 0x24, 0x4a, 0x35, 0x0e, 0xcb, 0x06, 0x25, 0x9c, 0xa2, 0x8c, 0xb6, 0x60, 0x8c, 0x0a, 0x39,
10068
-+	0x49, 0x53, 0x43, 0xc7, 0x6e, 0x4a, 0xa9, 0x8c, 0xee, 0xe8, 0x84, 0xb0, 0x49, 0x97, 0x1e, 0x26,
10069
-+	0x0d, 0x26, 0x14, 0x0d, 0x33, 0x8e, 0x42, 0x1d, 0x26, 0x5c, 0x1a, 0xe2, 0x30, 0x7a, 0x26, 0x31,
10070
-+	0xb3, 0x95, 0xb2, 0x79, 0x26, 0x69, 0xc6, 0x29, 0x5f, 0x86, 0x32, 0xa1, 0x43, 0x48, 0x09, 0x0b,
10071
-+	0xc5, 0xf8, 0x5c, 0x7f, 0x7d, 0x5d, 0x75, 0x1b, 0x61, 0x60, 0xca, 0xf2, 0x4b, 0x92, 0x12, 0x4e,
10072
-+	0x88, 0xa2, 0x45, 0x18, 0x8c, 0x48, 0xe8, 0x92, 0x48, 0xa8, 0xc8, 0xbb, 0x4c, 0x23, 0x43, 0xe3,
10073
-+	0x66, 0xee, 0xfc, 0x37, 0x16, 0x55, 0xe9, 0xf2, 0x72, 0x98, 0x34, 0xc4, 0xb4, 0xe2, 0xda, 0xf2,
10074
-+	0x9a, 0x67, 0xa5, 0x58, 0x40, 0xd1, 0x1b, 0x30, 0x14, 0x12, 0x8f, 0x29, 0x8b, 0xc6, 0xfa, 0x5f,
10075
-+	0xe4, 0x5c, 0xf7, 0xc4, 0xeb, 0x61, 0x49, 0x00, 0xdd, 0x06, 0x14, 0x12, 0xca, 0x43, 0xb8, 0xfe,
10076
-+	0x96, 0x32, 0xe6, 0x10, 0xba, 0xee, 0x27, 0x44, 0xfb, 0x67, 0x70, 0x82, 0x21, 0x0d, 0x60, 0x71,
10077
-+	0x46, 0x35, 0x74, 0x13, 0xa6, 0x54, 0xe9, 0x8a, 0x1f, 0xc5, 0x8e, 0xdf, 0x20, 0x4c, 0xcd, 0x5d,
10078
-+	0x4e, 0xb8, 0x22, 0x9c, 0x46, 0xc0, 0x9d, 0x75, 0xec, 0x9f, 0xa3, 0xec, 0x0c, 0x1d, 0xad, 0x53,
10079
-+	0xe0, 0x05, 0x5e, 0x37, 0x79, 0x81, 0x8b, 0xb9, 0x33, 0x97, 0xc3, 0x07, 0x1c, 0x5a, 0x30, 0xa2,
10080
-+	0xcd, 0x6c, 0xb2, 0x66, 0xad, 0x2e, 0x6b, 0xb6, 0x0d, 0x93, 0x74, 0xa5, 0xdf, 0xdd, 0x60, 0x1e,
10081
-+	0x5f, 0x4d, 0xb6, 0x30, 0x0b, 0x8f, 0xb6, 0x30, 0xd5, 0x2b, 0xf3, 0x9d, 0x14, 0x41, 0xdc, 0xd1,
10082
-+	0x04, 0x7a, 0x45, 0x6a, 0x4e, 0x8a, 0x86, 0x91, 0x16, 0xd7, 0x8a, 0x1c, 0x1d, 0x54, 0x26, 0xb5,
10083
-+	0x0f, 0xd1, 0x35, 0x25, 0xf6, 0x97, 0xe5, 0x37, 0xaa, 0xd7, 0xfc, 0x86, 0x5a, 0x2c, 0xa9, 0xd7,
10084
-+	0x7c, 0xb5, 0x1c, 0x70, 0x82, 0x43, 0xf7, 0x28, 0x15, 0x41, 0xd2, 0xaf, 0xf9, 0x54, 0x40, 0xc1,
10085
-+	0x0c, 0x62, 0xbf, 0x08, 0xb0, 0xf4, 0x90, 0x34, 0xf8, 0x52, 0xd7, 0x1f, 0x20, 0xad, 0xfc, 0x07,
10086
-+	0x48, 0xfb, 0x3f, 0x58, 0x30, 0xbe, 0xbc, 0x68, 0x88, 0x89, 0xb3, 0x00, 0x5c, 0x36, 0x7a, 0xeb,
10087
-+	0xad, 0x35, 0xa9, 0x5b, 0xe7, 0xea, 0x51, 0x55, 0x8a, 0x35, 0x0c, 0x74, 0x11, 0x8a, 0x5e, 0xdb,
10088
-+	0x17, 0x22, 0xcb, 0xd0, 0xe1, 0x41, 0xa5, 0x78, 0xa7, 0xed, 0x63, 0x5a, 0xa6, 0x59, 0x08, 0x16,
10089
-+	0xfb, 0xb6, 0x10, 0xec, 0xe9, 0xc9, 0x85, 0x2a, 0x30, 0xf0, 0xe0, 0x81, 0xdb, 0xe4, 0xf6, 0xf2,
10090
-+	0x42, 0xef, 0xff, 0xd6, 0x5b, 0x2b, 0xd5, 0x08, 0xf3, 0x72, 0xfb, 0xab, 0x45, 0x98, 0x59, 0xf6,
10091
-+	0xc8, 0xc3, 0x0f, 0xe8, 0x33, 0xd0, 0xaf, 0x7d, 0xe3, 0xf1, 0xf8, 0xc5, 0xe3, 0xda, 0xb0, 0xf6,
10092
-+	0x1e, 0x8f, 0x4d, 0x18, 0xe2, 0x8f, 0xd9, 0xd2, 0x83, 0xe0, 0xb5, 0xac, 0xd6, 0xf3, 0x07, 0x64,
10093
-+	0x96, 0x3f, 0x8a, 0x0b, 0xcf, 0x01, 0x75, 0xd3, 0x8a, 0x52, 0x2c, 0x89, 0xcf, 0x7c, 0x06, 0x46,
10094
-+	0x75, 0xcc, 0x63, 0x19, 0xae, 0xff, 0xa5, 0x22, 0x4c, 0xd2, 0x1e, 0x3c, 0xd6, 0x89, 0xb8, 0xd7,
10095
-+	0x39, 0x11, 0x27, 0x6d, 0x51, 0xdc, 0x7b, 0x36, 0xde, 0x49, 0xcf, 0xc6, 0x0b, 0x79, 0xb3, 0x71,
10096
-+	0xda, 0x73, 0xf0, 0xbd, 0x16, 0x9c, 0x59, 0xf6, 0x82, 0xc6, 0x4e, 0xca, 0xea, 0xf7, 0x65, 0x18,
10097
-+	0xa1, 0xe7, 0x78, 0x64, 0x38, 0x2c, 0x19, 0x2e, 0x6c, 0x02, 0x84, 0x75, 0x3c, 0xad, 0xda, 0xbd,
10098
-+	0x7b, 0x2b, 0xd5, 0x2c, 0xcf, 0x37, 0x01, 0xc2, 0x3a, 0x9e, 0xfd, 0x0d, 0x0b, 0x2e, 0xdf, 0x5c,
10099
-+	0x5c, 0x4a, 0x96, 0x62, 0x96, 0x93, 0x41, 0xab, 0xa9, 0x75, 0x25, 0x91, 0x02, 0xab, 0xac, 0x17,
10100
-+	0x02, 0xfa, 0x51, 0x71, 0x2c, 0xfd, 0x59, 0x0b, 0xce, 0xdc, 0x74, 0x63, 0x7a, 0x2d, 0xa7, 0xdd,
10101
-+	0xc0, 0xe8, 0xbd, 0x1c, 0xb9, 0x71, 0x10, 0xee, 0xa7, 0xdd, 0xc0, 0xb0, 0x82, 0x60, 0x0d, 0x8b,
10102
-+	0xb7, 0xbc, 0xe7, 0x32, 0x33, 0xaa, 0x82, 0xa9, 0x8a, 0xc2, 0xa2, 0x1c, 0x2b, 0x0c, 0xfa, 0x61,
10103
-+	0x4d, 0x37, 0x64, 0xa2, 0xc4, 0xbe, 0x38, 0x61, 0xd5, 0x87, 0x55, 0x25, 0x00, 0x27, 0x38, 0xf6,
10104
-+	0x4f, 0x58, 0x70, 0xee, 0xa6, 0xd7, 0x8e, 0x62, 0x12, 0x6e, 0x46, 0x46, 0x67, 0x5f, 0x84, 0x32,
10105
-+	0x91, 0xe2, 0xba, 0xe8, 0xab, 0x62, 0x30, 0x95, 0x1c, 0xcf, 0x7d, 0xd0, 0x14, 0x5e, 0x1f, 0x9e,
10106
-+	0x03, 0xc7, 0xf3, 0x52, 0xfb, 0xc5, 0x02, 0x8c, 0xdd, 0x5a, 0x5f, 0xaf, 0xdd, 0x24, 0xb1, 0xb8,
10107
-+	0xc5, 0x7a, 0xab, 0x9a, 0xb1, 0xa6, 0x31, 0xeb, 0x26, 0x14, 0xb5, 0x63, 0xd7, 0x9b, 0xe5, 0x4e,
10108
-+	0xcf, 0xb3, 0x2b, 0x7e, 0x7c, 0x37, 0xac, 0xc7, 0xa1, 0xeb, 0x6f, 0x65, 0xea, 0xd8, 0xe4, 0x5d,
10109
-+	0x5b, 0xcc, 0xbb, 0x6b, 0xd1, 0x8b, 0x30, 0xc8, 0xbc, 0xae, 0xa5, 0x78, 0xf2, 0x84, 0x92, 0x29,
10110
-+	0x58, 0xe9, 0xd1, 0x41, 0xa5, 0x7c, 0x0f, 0xaf, 0xf0, 0x3f, 0x58, 0xa0, 0xa2, 0x7b, 0x30, 0xb2,
10111
-+	0x1d, 0xc7, 0xad, 0x5b, 0xc4, 0x69, 0x92, 0x50, 0x9e, 0x0e, 0x57, 0xb2, 0x4e, 0x07, 0x3a, 0x08,
10112
-+	0x1c, 0x2d, 0xd9, 0x50, 0x49, 0x59, 0x84, 0x75, 0x3a, 0x76, 0x1d, 0x20, 0x81, 0x9d, 0x90, 0x7e,
10113
-+	0xc1, 0xfe, 0x03, 0x0b, 0x86, 0xb8, 0x03, 0x5c, 0x88, 0x3e, 0x0b, 0x25, 0xf2, 0x90, 0x34, 0x04,
10114
-+	0xe7, 0x98, 0xd9, 0xe1, 0x84, 0xf1, 0xe0, 0xda, 0x72, 0xfa, 0x1f, 0xb3, 0x5a, 0xe8, 0x16, 0x0c,
10115
-+	0xd1, 0xde, 0xde, 0x54, 0xde, 0x80, 0x4f, 0xe6, 0x7d, 0xb1, 0x9a, 0x76, 0xce, 0xab, 0x88, 0x22,
10116
-+	0x2c, 0xab, 0x33, 0xcd, 0x6f, 0xa3, 0x55, 0xa7, 0x07, 0x58, 0xdc, 0xed, 0x9e, 0x5d, 0x5f, 0xac,
10117
-+	0x71, 0x24, 0x41, 0x8d, 0x6b, 0x7e, 0x65, 0x21, 0x4e, 0x88, 0xd8, 0xeb, 0x50, 0xa6, 0x93, 0x3a,
10118
-+	0xef, 0xb9, 0x4e, 0x77, 0xa5, 0xf3, 0xb3, 0x50, 0x96, 0x0a, 0xe0, 0x48, 0xf8, 0x50, 0x31, 0xaa,
10119
-+	0x52, 0x3f, 0x1c, 0xe1, 0x04, 0x6e, 0x6f, 0xc2, 0x59, 0xf6, 0xf2, 0xef, 0xc4, 0xdb, 0xc6, 0x1e,
10120
-+	0xeb, 0xbd, 0x98, 0x9f, 0x13, 0x82, 0x18, 0x9f, 0x99, 0x69, 0xcd, 0x77, 0x60, 0x54, 0x52, 0x4c,
10121
-+	0x84, 0x32, 0xfb, 0x8f, 0x4a, 0xf0, 0xc4, 0x4a, 0x3d, 0xdf, 0x37, 0xf2, 0x55, 0x18, 0xe5, 0x6c,
10122
-+	0x1a, 0x5d, 0xda, 0x8e, 0x27, 0xda, 0x55, 0xef, 0x62, 0xeb, 0x1a, 0x0c, 0x1b, 0x98, 0xe8, 0x32,
10123
-+	0x14, 0xdd, 0xf7, 0xfc, 0xb4, 0x19, 0xee, 0xca, 0x9b, 0x6b, 0x98, 0x96, 0x53, 0x30, 0xe5, 0xf8,
10124
-+	0xf8, 0x51, 0xaa, 0xc0, 0x8a, 0xeb, 0x7b, 0x1d, 0xc6, 0xdd, 0xa8, 0x11, 0xb9, 0x2b, 0x3e, 0x3d,
10125
-+	0x67, 0x12, 0xbf, 0xda, 0x44, 0x49, 0x40, 0x3b, 0xad, 0xa0, 0x38, 0x85, 0xad, 0x9d, 0xeb, 0x03,
10126
-+	0x7d, 0x73, 0x8d, 0x3d, 0x3d, 0x7d, 0x28, 0x43, 0xdc, 0x62, 0x5f, 0x17, 0x31, 0xa3, 0x36, 0xc1,
10127
-+	0x10, 0xf3, 0x0f, 0x8e, 0xb0, 0x84, 0x51, 0x09, 0xac, 0xb1, 0xed, 0xb4, 0xe6, 0xdb, 0xf1, 0x76,
10128
-+	0xd5, 0x8d, 0x1a, 0xc1, 0x1e, 0x09, 0xf7, 0x99, 0xf0, 0x3c, 0x9c, 0x48, 0x60, 0x0a, 0xb0, 0x78,
10129
-+	0x6b, 0xbe, 0x46, 0x31, 0x71, 0x67, 0x1d, 0x93, 0x2b, 0x84, 0x93, 0xe0, 0x0a, 0xe7, 0x61, 0x42,
10130
-+	0x36, 0x53, 0x27, 0x11, 0xbb, 0x23, 0x46, 0x58, 0xc7, 0x94, 0xa9, 0xad, 0x28, 0x56, 0xdd, 0x4a,
10131
-+	0xe3, 0xa3, 0x57, 0x60, 0xcc, 0xf5, 0xdd, 0xd8, 0x75, 0xe2, 0x20, 0x64, 0x37, 0x2c, 0x97, 0x93,
10132
-+	0x99, 0x25, 0xdb, 0x8a, 0x0e, 0xc0, 0x26, 0x9e, 0xfd, 0x87, 0x25, 0x98, 0x62, 0xd3, 0xf6, 0xad,
10133
-+	0x15, 0xf6, 0x91, 0x59, 0x61, 0xf7, 0x3a, 0x57, 0xd8, 0x49, 0xb0, 0xbb, 0x1f, 0xe6, 0x32, 0x7b,
10134
-+	0x17, 0xca, 0xca, 0x16, 0x58, 0x3a, 0x03, 0x58, 0x39, 0xce, 0x00, 0xbd, 0xb9, 0x0f, 0xf9, 0x8c,
10135
-+	0x5b, 0xcc, 0x7c, 0xc6, 0xfd, 0xdb, 0x16, 0x24, 0x26, 0x91, 0xe8, 0x16, 0x94, 0x5b, 0x01, 0x33,
10136
-+	0x3b, 0x08, 0xa5, 0x2d, 0xcf, 0x13, 0x99, 0x17, 0x15, 0xbf, 0x14, 0xf9, 0xf8, 0xd5, 0x64, 0x0d,
10137
-+	0x9c, 0x54, 0x46, 0x0b, 0x30, 0xd4, 0x0a, 0x49, 0x3d, 0x66, 0xde, 0xb6, 0x3d, 0xe9, 0xf0, 0x35,
10138
-+	0xc2, 0xf1, 0xb1, 0xac, 0x68, 0xff, 0x92, 0x05, 0xc0, 0x5f, 0x4a, 0x1d, 0x7f, 0x8b, 0x9c, 0x82,
10139
-+	0xf6, 0xb7, 0x0a, 0xa5, 0xa8, 0x45, 0x1a, 0xdd, 0x0c, 0x42, 0x92, 0xfe, 0xd4, 0x5b, 0xa4, 0x91,
10140
-+	0x0c, 0x38, 0xfd, 0x87, 0x59, 0x6d, 0xfb, 0xfb, 0x00, 0xc6, 0x13, 0xb4, 0x95, 0x98, 0xec, 0xa2,
10141
-+	0xe7, 0x0d, 0x97, 0xb8, 0x8b, 0x29, 0x97, 0xb8, 0x32, 0xc3, 0xd6, 0x14, 0x8d, 0xef, 0x42, 0x71,
10142
-+	0xd7, 0x79, 0x28, 0x34, 0x49, 0xcf, 0x76, 0xef, 0x06, 0xa5, 0x3f, 0xbb, 0xea, 0x3c, 0xe4, 0x32,
10143
-+	0xd3, 0xb3, 0x72, 0x81, 0xac, 0x3a, 0x0f, 0x8f, 0xb8, 0xd9, 0x07, 0x3b, 0xa4, 0xee, 0xb8, 0x51,
10144
-+	0xfc, 0x95, 0xff, 0x9c, 0xfc, 0x67, 0xcb, 0x8e, 0x36, 0xc2, 0xda, 0x72, 0x7d, 0xf1, 0x6e, 0xd8,
10145
-+	0x57, 0x5b, 0xae, 0x9f, 0x6e, 0xcb, 0xf5, 0xfb, 0x68, 0xcb, 0xf5, 0xd1, 0xfb, 0x30, 0x24, 0xde,
10146
-+	0xe8, 0x99, 0xad, 0xb7, 0xa9, 0xa5, 0xca, 0x6b, 0x4f, 0x3c, 0xf1, 0xf3, 0x36, 0xe7, 0xa4, 0x4c,
10147
-+	0x28, 0x4a, 0x7b, 0xb6, 0x2b, 0x1b, 0x44, 0x7f, 0xc3, 0x82, 0x71, 0xf1, 0x1b, 0x93, 0xf7, 0xda,
10148
-+	0x24, 0x8a, 0x05, 0xef, 0xf9, 0xe9, 0xfe, 0xfb, 0x20, 0x2a, 0xf2, 0xae, 0x7c, 0x5a, 0x1e, 0xb3,
10149
-+	0x26, 0xb0, 0x67, 0x8f, 0x52, 0xbd, 0x40, 0xff, 0xc8, 0x82, 0xb3, 0xbb, 0xce, 0x43, 0xde, 0x22,
10150
-+	0x2f, 0xc3, 0x4e, 0xec, 0x06, 0xc2, 0x76, 0xfd, 0xb3, 0xfd, 0x4d, 0x7f, 0x47, 0x75, 0xde, 0x49,
10151
-+	0x69, 0xe6, 0x7a, 0x36, 0x0b, 0xa5, 0x67, 0x57, 0x33, 0xfb, 0x35, 0xb3, 0x09, 0xc3, 0x72, 0xbd,
10152
-+	0x65, 0x48, 0xde, 0x55, 0x9d, 0xb1, 0x3e, 0xb6, 0x89, 0x84, 0xee, 0x97, 0x46, 0xdb, 0x11, 0x6b,
10153
-+	0xed, 0xb1, 0xb6, 0xf3, 0x2e, 0x8c, 0xea, 0x6b, 0xec, 0xb1, 0xb6, 0xf5, 0x1e, 0x9c, 0xc9, 0x58,
10154
-+	0x4b, 0x8f, 0xb5, 0xc9, 0x07, 0x70, 0x31, 0x77, 0x7d, 0x3c, 0xce, 0x86, 0xed, 0x5f, 0xb4, 0xf4,
10155
-+	0x73, 0xf0, 0x14, 0x54, 0xf0, 0x8b, 0xa6, 0x0a, 0xfe, 0x4a, 0xf7, 0x9d, 0x93, 0xa3, 0x87, 0x7f,
10156
-+	0x47, 0xef, 0x34, 0x3d, 0xd5, 0xd1, 0x1b, 0x30, 0xe8, 0xd1, 0x12, 0x69, 0x1c, 0x62, 0xf7, 0xde,
10157
-+	0x91, 0x09, 0x2f, 0xc5, 0xca, 0x23, 0x2c, 0x28, 0xd8, 0xbf, 0x6a, 0x41, 0xe9, 0x14, 0x46, 0x02,
10158
-+	0x9b, 0x23, 0xf1, 0x7c, 0x2e, 0x69, 0x11, 0x3d, 0x6d, 0x16, 0x3b, 0x0f, 0x96, 0x64, 0x84, 0xb8,
10159
-+	0x9c, 0x81, 0xf9, 0x2e, 0x38, 0x73, 0x27, 0x70, 0x9a, 0x0b, 0x8e, 0xe7, 0xf8, 0x0d, 0x12, 0xae,
10160
-+	0xf8, 0x5b, 0x3d, 0xad, 0x94, 0x74, 0x9b, 0xa2, 0x42, 0x2f, 0x9b, 0x22, 0x7b, 0x1b, 0x90, 0xde,
10161
-+	0x80, 0xb0, 0xe3, 0xc4, 0x30, 0xe4, 0xf2, 0xa6, 0xc4, 0xf0, 0x3f, 0x9d, 0xcd, 0xdd, 0x75, 0xf4,
10162
-+	0x4c, 0xb3, 0x50, 0xe4, 0x05, 0x58, 0x12, 0xb2, 0x5f, 0x85, 0x4c, 0xdf, 0xad, 0xde, 0x6a, 0x03,
10163
-+	0xfb, 0x65, 0x98, 0x62, 0x35, 0x8f, 0x27, 0xd2, 0xda, 0x3f, 0x60, 0xc1, 0xc4, 0x5a, 0x2a, 0x36,
10164
-+	0xc5, 0x35, 0xf6, 0xd6, 0x97, 0xa1, 0xf7, 0xad, 0xb3, 0x52, 0x2c, 0xa0, 0x27, 0xae, 0x5f, 0xfa,
10165
-+	0x33, 0x0b, 0x12, 0x57, 0xc9, 0x53, 0x60, 0xaa, 0x16, 0x0d, 0xa6, 0x2a, 0x53, 0xef, 0xa1, 0xba,
10166
-+	0x93, 0xc7, 0x53, 0xa1, 0xdb, 0x2a, 0x2e, 0x40, 0x17, 0x95, 0x47, 0x42, 0x86, 0x7b, 0x91, 0x8f,
10167
-+	0x9b, 0xc1, 0x03, 0x64, 0xa4, 0x00, 0x66, 0x26, 0xa4, 0x70, 0x3f, 0x22, 0x66, 0x42, 0xaa, 0x3f,
10168
-+	0x39, 0xbb, 0xaf, 0xa6, 0x75, 0x99, 0x9d, 0x4a, 0xdf, 0xce, 0xcc, 0xbe, 0x1d, 0xcf, 0x7d, 0x9f,
10169
-+	0xa8, 0xe0, 0x26, 0x15, 0x61, 0xc6, 0x2d, 0x4a, 0x8f, 0x0e, 0x2a, 0x63, 0xea, 0x1f, 0x0f, 0xb6,
10170
-+	0x95, 0x54, 0xb1, 0x6f, 0xc1, 0x44, 0x6a, 0xc0, 0xd0, 0xcb, 0x30, 0xd0, 0xda, 0x76, 0x22, 0x92,
10171
-+	0x32, 0x8d, 0x1c, 0xa8, 0xd1, 0xc2, 0xa3, 0x83, 0xca, 0xb8, 0xaa, 0xc0, 0x4a, 0x30, 0xc7, 0xb6,
10172
-+	0xff, 0xa7, 0x05, 0xa5, 0xb5, 0xa0, 0x79, 0x1a, 0x8b, 0xe9, 0x75, 0x63, 0x31, 0x5d, 0xca, 0x0b,
10173
-+	0x55, 0x98, 0xbb, 0x8e, 0x96, 0x53, 0xeb, 0xe8, 0x4a, 0x2e, 0x85, 0xee, 0x4b, 0x68, 0x17, 0x46,
10174
-+	0x58, 0x00, 0x44, 0x61, 0xaa, 0xf9, 0xa2, 0xc1, 0xdf, 0x57, 0x52, 0xfc, 0xfd, 0x84, 0x86, 0xaa,
10175
-+	0x71, 0xf9, 0xcf, 0xc0, 0x90, 0x30, 0x17, 0x4c, 0x1b, 0xb8, 0x0b, 0x5c, 0x2c, 0xe1, 0xf6, 0x4f,
10176
-+	0x16, 0xc1, 0x08, 0xb8, 0x88, 0x7e, 0xcd, 0x82, 0xd9, 0x90, 0x7b, 0x0c, 0x36, 0xab, 0xed, 0xd0,
10177
-+	0xf5, 0xb7, 0xea, 0x8d, 0x6d, 0xd2, 0x6c, 0x7b, 0xae, 0xbf, 0xb5, 0xb2, 0xe5, 0x07, 0xaa, 0x78,
10178
-+	0xe9, 0x21, 0x69, 0xb4, 0x99, 0xce, 0xbf, 0x47, 0x74, 0x47, 0x65, 0x8e, 0x73, 0xe3, 0xf0, 0xa0,
10179
-+	0x32, 0x8b, 0x8f, 0x45, 0x1b, 0x1f, 0xb3, 0x2f, 0xe8, 0x1b, 0x16, 0xcc, 0xf1, 0x38, 0x84, 0xfd,
10180
-+	0xf7, 0xbf, 0x8b, 0x34, 0x54, 0x93, 0xa4, 0x12, 0x22, 0xeb, 0x24, 0xdc, 0x5d, 0x78, 0x45, 0x0c,
10181
-+	0xe8, 0x5c, 0xed, 0x78, 0x6d, 0xe1, 0xe3, 0x76, 0xce, 0xfe, 0x97, 0x45, 0x18, 0x13, 0xce, 0xea,
10182
-+	0x22, 0x0a, 0xca, 0xcb, 0xc6, 0x92, 0x78, 0x32, 0xb5, 0x24, 0xa6, 0x0c, 0xe4, 0x93, 0x09, 0x80,
10183
-+	0x12, 0xc1, 0x94, 0xe7, 0x44, 0xf1, 0x2d, 0xe2, 0x84, 0xf1, 0x06, 0x71, 0xb8, 0x99, 0x4a, 0xf1,
10184
-+	0xd8, 0x26, 0x35, 0x4a, 0xfd, 0x72, 0x27, 0x4d, 0x0c, 0x77, 0xd2, 0x47, 0x7b, 0x80, 0x98, 0xad,
10185
-+	0x4d, 0xe8, 0xf8, 0x11, 0xff, 0x16, 0x57, 0xbc, 0x07, 0x1c, 0xaf, 0xd5, 0x19, 0xd1, 0x2a, 0xba,
10186
-+	0xd3, 0x41, 0x0d, 0x67, 0xb4, 0xa0, 0xd9, 0x50, 0x0d, 0xf4, 0x6b, 0x43, 0x35, 0xd8, 0xc3, 0x8b,
10187
-+	0xc4, 0x87, 0xc9, 0x8e, 0x78, 0x03, 0x6f, 0x43, 0x59, 0xd9, 0xba, 0x89, 0x43, 0xa7, 0x7b, 0xd8,
10188
-+	0x8e, 0x34, 0x05, 0xae, 0x22, 0x49, 0xec, 0x2c, 0x13, 0x72, 0xf6, 0x3f, 0x2e, 0x18, 0x0d, 0xf2,
10189
-+	0x49, 0x5c, 0x83, 0x61, 0x27, 0x8a, 0xdc, 0x2d, 0x9f, 0x34, 0xc5, 0x8e, 0xfd, 0x78, 0xde, 0x8e,
10190
-+	0x35, 0x9a, 0x61, 0xf6, 0x86, 0xf3, 0xa2, 0x26, 0x56, 0x34, 0xd0, 0x2d, 0x6e, 0x0c, 0xb4, 0x27,
10191
-+	0xf9, 0xf9, 0xfe, 0xa8, 0x81, 0x34, 0x17, 0xda, 0x23, 0x58, 0xd4, 0x47, 0x5f, 0xe4, 0xd6, 0x5a,
10192
-+	0xb7, 0xfd, 0xe0, 0x81, 0x7f, 0x33, 0x08, 0xa4, 0x87, 0x59, 0x7f, 0x04, 0xa7, 0xa4, 0x8d, 0x96,
10193
-+	0xaa, 0x8e, 0x4d, 0x6a, 0xfd, 0xc5, 0xe4, 0xf9, 0x6e, 0x38, 0x43, 0x49, 0x9b, 0x7e, 0x22, 0x11,
10194
-+	0x22, 0x30, 0x21, 0x22, 0x21, 0xc8, 0x32, 0x31, 0x76, 0x99, 0xac, 0xba, 0x59, 0x3b, 0x51, 0xe8,
10195
-+	0xdd, 0x36, 0x49, 0xe0, 0x34, 0x4d, 0xfb, 0x67, 0x2c, 0x60, 0x16, 0xee, 0xa7, 0xc0, 0x32, 0x7c,
10196
-+	0xce, 0x64, 0x19, 0xa6, 0xf3, 0x06, 0x39, 0x87, 0x5b, 0x78, 0x89, 0xaf, 0xac, 0x5a, 0x18, 0x3c,
10197
-+	0xdc, 0x17, 0x2f, 0xe5, 0x7d, 0x70, 0xa9, 0xff, 0xc7, 0xe2, 0x87, 0x98, 0x72, 0x3a, 0x47, 0xdf,
10198
-+	0x03, 0xc3, 0x0d, 0xa7, 0xe5, 0x34, 0x78, 0x74, 0xe0, 0x5c, 0x8d, 0x8d, 0x51, 0x69, 0x76, 0x51,
10199
-+	0xd4, 0xe0, 0x1a, 0x08, 0x19, 0x51, 0x63, 0x58, 0x16, 0xf7, 0xd4, 0x3a, 0xa8, 0x26, 0x67, 0x76,
10200
-+	0x60, 0xcc, 0x20, 0xf6, 0x58, 0xc5, 0xd5, 0xef, 0xe1, 0x57, 0xac, 0x8a, 0x00, 0xb3, 0x0b, 0x53,
10201
-+	0xbe, 0xf6, 0x9f, 0x5e, 0x28, 0x52, 0x04, 0xf9, 0x78, 0xaf, 0x4b, 0x94, 0xdd, 0x3e, 0x9a, 0x05,
10202
-+	0x7f, 0x8a, 0x0c, 0xee, 0xa4, 0x6c, 0xff, 0x94, 0x05, 0x17, 0x74, 0x44, 0x2d, 0x1e, 0x40, 0x2f,
10203
-+	0x1d, 0x70, 0x15, 0x86, 0x83, 0x16, 0x09, 0x9d, 0x38, 0x08, 0xc5, 0xad, 0x71, 0x5d, 0x0e, 0xfa,
10204
-+	0x5d, 0x51, 0x7e, 0x24, 0xc2, 0x34, 0x4a, 0xea, 0xb2, 0x1c, 0xab, 0x9a, 0xc8, 0x86, 0x41, 0x36,
10205
-+	0x18, 0x91, 0x88, 0xd5, 0xc0, 0xce, 0x00, 0xf6, 0x1c, 0x1a, 0x61, 0x01, 0xb1, 0xff, 0xc8, 0xe2,
10206
-+	0x0b, 0x4b, 0xef, 0x3a, 0x7a, 0x0f, 0x26, 0x77, 0x9d, 0xb8, 0xb1, 0xbd, 0xf4, 0xb0, 0x15, 0x72,
10207
-+	0xd5, 0xb7, 0x1c, 0xa7, 0x67, 0x7b, 0x8d, 0x93, 0xf6, 0x91, 0x89, 0x01, 0xda, 0x6a, 0x8a, 0x18,
10208
-+	0xee, 0x20, 0x8f, 0x36, 0x60, 0x84, 0x95, 0x31, 0x4b, 0xe7, 0xa8, 0x1b, 0x6b, 0x90, 0xd7, 0x9a,
10209
-+	0x7a, 0x51, 0x5e, 0x4d, 0xe8, 0x60, 0x9d, 0xa8, 0xfd, 0x95, 0x22, 0xdf, 0xed, 0x8c, 0xdb, 0x7e,
10210
-+	0x06, 0x86, 0x5a, 0x41, 0x73, 0x71, 0xa5, 0x8a, 0xc5, 0x2c, 0xa8, 0x6b, 0xa4, 0xc6, 0x8b, 0xb1,
10211
-+	0x84, 0xa3, 0xd7, 0x00, 0xc8, 0xc3, 0x98, 0x84, 0xbe, 0xe3, 0x29, 0x83, 0x10, 0x65, 0x02, 0x59,
10212
-+	0x0d, 0xd6, 0x82, 0xf8, 0x5e, 0x44, 0xbe, 0x6b, 0x49, 0xa1, 0x60, 0x0d, 0x1d, 0xdd, 0x00, 0x68,
10213
-+	0x85, 0xc1, 0x9e, 0xdb, 0x64, 0xae, 0x73, 0x45, 0xd3, 0x5c, 0xa2, 0xa6, 0x20, 0x58, 0xc3, 0x42,
10214
-+	0xaf, 0xc1, 0x58, 0xdb, 0x8f, 0x38, 0x87, 0xe2, 0x6c, 0x88, 0xc8, 0x83, 0xc3, 0x89, 0xe5, 0xc2,
10215
-+	0x3d, 0x1d, 0x88, 0x4d, 0x5c, 0x34, 0x0f, 0x83, 0xb1, 0xc3, 0xec, 0x1d, 0x06, 0xf2, 0xed, 0x16,
10216
-+	0xd7, 0x29, 0x86, 0x1e, 0x9b, 0x96, 0x56, 0xc0, 0xa2, 0x22, 0x7a, 0x5b, 0xfa, 0x21, 0xf0, 0xb3,
10217
-+	0x5e, 0x18, 0x0c, 0xf7, 0x77, 0x2f, 0x68, 0x5e, 0x08, 0xc2, 0x10, 0xd9, 0xa0, 0x65, 0x7f, 0xa3,
10218
-+	0x0c, 0x90, 0xb0, 0xe3, 0xe8, 0xfd, 0x8e, 0xf3, 0xe8, 0xb9, 0xee, 0x0c, 0xfc, 0xc9, 0x1d, 0x46,
10219
-+	0xe8, 0xfb, 0x2d, 0x18, 0x71, 0x3c, 0x2f, 0x68, 0x38, 0x31, 0x1b, 0xe5, 0x42, 0xf7, 0xf3, 0x50,
10220
-+	0xb4, 0x3f, 0x9f, 0xd4, 0xe0, 0x5d, 0x78, 0x51, 0x2e, 0x3c, 0x0d, 0xd2, 0xb3, 0x17, 0x7a, 0xc3,
10221
-+	0xe8, 0x53, 0x52, 0x4a, 0xe3, 0xcb, 0x63, 0x26, 0x2d, 0xa5, 0x95, 0xd9, 0xd1, 0xaf, 0x09, 0x68,
10222
-+	0xe8, 0x9e, 0x11, 0x54, 0xae, 0x94, 0x1f, 0x5f, 0xc1, 0xe0, 0x4a, 0x7b, 0xc5, 0x93, 0x43, 0x35,
10223
-+	0xdd, 0x71, 0x6a, 0x20, 0x3f, 0x08, 0x89, 0x26, 0xfe, 0xf4, 0x70, 0x9a, 0x7a, 0x17, 0x26, 0x9a,
10224
-+	0xe6, 0xdd, 0x2e, 0x56, 0xd3, 0xd3, 0x79, 0x74, 0x53, 0xac, 0x40, 0x72, 0x9b, 0xa7, 0x00, 0x38,
10225
-+	0x4d, 0x18, 0xd5, 0xb8, 0x0b, 0xdb, 0x8a, 0xbf, 0x19, 0x08, 0xc3, 0x73, 0x3b, 0x77, 0x2e, 0xf7,
10226
-+	0xa3, 0x98, 0xec, 0x52, 0xcc, 0xe4, 0xd2, 0x5e, 0x13, 0x75, 0xb1, 0xa2, 0x82, 0xde, 0x80, 0x41,
10227
-+	0xe6, 0x03, 0x1b, 0x4d, 0x0f, 0xe7, 0x2b, 0x0a, 0xcd, 0xf0, 0x0d, 0xc9, 0xa6, 0x62, 0x7f, 0x23,
10228
-+	0x2c, 0x28, 0xa0, 0x5b, 0x32, 0xc6, 0x4b, 0xb4, 0xe2, 0xdf, 0x8b, 0x08, 0x8b, 0xf1, 0x52, 0x5e,
10229
-+	0xf8, 0x78, 0x12, 0xbe, 0x85, 0x97, 0x67, 0x46, 0xa1, 0x37, 0x6a, 0x52, 0xe6, 0x48, 0xfc, 0x97,
10230
-+	0xc1, 0xed, 0xa7, 0x21, 0xbf, 0x7b, 0x66, 0x00, 0xfc, 0x64, 0x38, 0xef, 0x9b, 0x24, 0x70, 0x9a,
10231
-+	0x26, 0x65, 0x34, 0xf9, 0xce, 0x15, 0xa6, 0xeb, 0xbd, 0xf6, 0x3f, 0x97, 0xaf, 0xd9, 0x25, 0xc3,
10232
-+	0x4b, 0xb0, 0xa8, 0x7f, 0xaa, 0xb7, 0xfe, 0x8c, 0x0f, 0x93, 0xe9, 0x2d, 0xfa, 0x58, 0xb9, 0x8c,
10233
-+	0x3f, 0x28, 0xc1, 0xb8, 0xb9, 0xa4, 0xd0, 0x1c, 0x94, 0x05, 0x11, 0x15, 0x70, 0x54, 0xed, 0x92,
10234
-+	0x55, 0x09, 0xc0, 0x09, 0x0e, 0x8b, 0x33, 0xcb, 0xaa, 0x6b, 0x26, 0x87, 0x49, 0x9c, 0x59, 0x05,
10235
-+	0xc1, 0x1a, 0x16, 0x95, 0x97, 0x36, 0x82, 0x20, 0x56, 0x97, 0x8a, 0x5a, 0x77, 0x0b, 0xac, 0x14,
10236
-+	0x0b, 0x28, 0xbd, 0x4c, 0x76, 0x48, 0xe8, 0x13, 0xcf, 0x8c, 0x63, 0xa6, 0x2e, 0x93, 0xdb, 0x3a,
10237
-+	0x10, 0x9b, 0xb8, 0xf4, 0x96, 0x0c, 0x22, 0xb6, 0x90, 0x85, 0x54, 0x96, 0x98, 0x70, 0xd6, 0xb9,
10238
-+	0x37, 0xb9, 0x84, 0xa3, 0x2f, 0xc0, 0x05, 0xe5, 0xfc, 0x8d, 0xb9, 0x12, 0x5a, 0xb6, 0x38, 0x68,
10239
-+	0x28, 0x51, 0x2e, 0x2c, 0x66, 0xa3, 0xe1, 0xbc, 0xfa, 0xe8, 0x75, 0x18, 0x17, 0x9c, 0xbb, 0xa4,
10240
-+	0x38, 0x64, 0xda, 0x45, 0xdc, 0x36, 0xa0, 0x38, 0x85, 0x2d, 0x23, 0xb1, 0x31, 0xe6, 0x59, 0x52,
10241
-+	0x18, 0xee, 0x8c, 0xc4, 0xa6, 0xc3, 0x71, 0x47, 0x0d, 0x34, 0x0f, 0x13, 0x9c, 0xb5, 0x72, 0xfd,
10242
-+	0x2d, 0x3e, 0x27, 0xc2, 0xb3, 0x44, 0x6d, 0xa9, 0xbb, 0x26, 0x18, 0xa7, 0xf1, 0xd1, 0xab, 0x30,
10243
-+	0xea, 0x84, 0x8d, 0x6d, 0x37, 0x26, 0x8d, 0xb8, 0x1d, 0x72, 0x97, 0x13, 0xcd, 0xb0, 0x64, 0x5e,
10244
-+	0x83, 0x61, 0x03, 0xd3, 0x7e, 0x1f, 0xce, 0x64, 0x38, 0xa5, 0xd1, 0x85, 0xe3, 0xb4, 0x5c, 0xf9,
10245
-+	0x4d, 0x29, 0x63, 0xcc, 0xf9, 0xda, 0x8a, 0xfc, 0x1a, 0x0d, 0x8b, 0xae, 0x4e, 0xe6, 0xbc, 0xa6,
10246
-+	0xe5, 0xb2, 0x50, 0xab, 0x73, 0x59, 0x02, 0x70, 0x82, 0x63, 0xff, 0xaf, 0x02, 0x4c, 0x64, 0x28,
10247
-+	0xd6, 0x59, 0x3e, 0x85, 0x94, 0xec, 0x91, 0xa4, 0x4f, 0x30, 0x03, 0xfb, 0x15, 0x8e, 0x11, 0xd8,
10248
-+	0xaf, 0xd8, 0x2b, 0xb0, 0x5f, 0xe9, 0x83, 0x04, 0xf6, 0x33, 0x47, 0x6c, 0xa0, 0xaf, 0x11, 0xcb,
10249
-+	0x08, 0x06, 0x38, 0x78, 0xcc, 0x60, 0x80, 0xc6, 0xa0, 0x0f, 0xf5, 0x31, 0xe8, 0x3f, 0x5a, 0x80,
10250
-+	0xc9, 0xb4, 0x01, 0xdc, 0x29, 0xa8, 0x63, 0xdf, 0x30, 0xd4, 0xb1, 0xd9, 0xd9, 0x49, 0xd2, 0x66,
10251
-+	0x79, 0x79, 0xaa, 0x59, 0x9c, 0x52, 0xcd, 0x7e, 0xb2, 0x2f, 0x6a, 0xdd, 0xd5, 0xb4, 0x7f, 0xb7,
10252
-+	0x00, 0xe7, 0xd2, 0x55, 0x16, 0x3d, 0xc7, 0xdd, 0x3d, 0x85, 0xb1, 0xb9, 0x6b, 0x8c, 0xcd, 0xf3,
10253
-+	0xfd, 0x7c, 0x0d, 0xeb, 0x5a, 0xee, 0x00, 0xbd, 0x95, 0x1a, 0xa0, 0xb9, 0xfe, 0x49, 0x76, 0x1f,
10254
-+	0xa5, 0x6f, 0x16, 0xe1, 0x4a, 0x66, 0xbd, 0x44, 0x9b, 0xb9, 0x6c, 0x68, 0x33, 0x6f, 0xa4, 0xb4,
10255
-+	0x99, 0x76, 0xf7, 0xda, 0x27, 0xa3, 0xde, 0x14, 0xde, 0x82, 0x2c, 0xf8, 0xdb, 0x23, 0xaa, 0x36,
10256
-+	0x0d, 0x6f, 0x41, 0x45, 0x08, 0x9b, 0x74, 0xff, 0x22, 0xa9, 0x34, 0xff, 0xad, 0x05, 0x17, 0x33,
10257
-+	0xe7, 0xe6, 0x14, 0x54, 0x58, 0x6b, 0xa6, 0x0a, 0xeb, 0x99, 0xbe, 0x57, 0x6b, 0x8e, 0x4e, 0xeb,
10258
-+	0x0f, 0x8b, 0x39, 0xdf, 0xc2, 0x04, 0xf4, 0xbb, 0x30, 0xe2, 0x34, 0x1a, 0x24, 0x8a, 0x56, 0x83,
10259
-+	0xa6, 0x0a, 0x86, 0xf6, 0x3c, 0x93, 0xb3, 0x92, 0xe2, 0xa3, 0x83, 0xca, 0x4c, 0x9a, 0x44, 0x02,
10260
-+	0xc6, 0x3a, 0x05, 0x33, 0x7e, 0x63, 0xe1, 0x44, 0xe3, 0x37, 0xde, 0x00, 0xd8, 0x53, 0xdc, 0x7a,
10261
-+	0x5a, 0xc8, 0xd7, 0xf8, 0x78, 0x0d, 0x0b, 0x7d, 0x11, 0x86, 0x23, 0x71, 0x8d, 0x8b, 0xa5, 0xf8,
10262
-+	0x62, 0x9f, 0x73, 0xe5, 0x6c, 0x10, 0xcf, 0x74, 0x4b, 0x57, 0xfa, 0x10, 0x45, 0x12, 0x7d, 0x07,
10263
-+	0x4c, 0x46, 0x3c, 0xea, 0xc9, 0xa2, 0xe7, 0x44, 0xcc, 0xc7, 0x41, 0xac, 0x42, 0xe6, 0x6b, 0x5e,
10264
-+	0x4f, 0xc1, 0x70, 0x07, 0x36, 0x5a, 0x96, 0x1f, 0xc5, 0x42, 0xb4, 0xf0, 0x85, 0x79, 0x2d, 0xf9,
10265
-+	0x20, 0x91, 0xcd, 0xe9, 0x6c, 0x7a, 0xf8, 0xd9, 0xc0, 0x6b, 0x35, 0xed, 0x1f, 0x2d, 0xc1, 0x13,
10266
-+	0x5d, 0x0e, 0x31, 0x34, 0x6f, 0xbe, 0x51, 0x3e, 0x9b, 0x96, 0x7e, 0x67, 0x32, 0x2b, 0x1b, 0xe2,
10267
-+	0x70, 0x6a, 0xad, 0x14, 0x3e, 0xf0, 0x5a, 0xf9, 0x21, 0x4b, 0xd3, 0x4b, 0x70, 0x4b, 0xba, 0xcf,
10268
-+	0x1d, 0xf3, 0x70, 0x3e, 0x41, 0x45, 0xc5, 0x66, 0x86, 0xb4, 0x7f, 0xa3, 0xef, 0xee, 0xf4, 0x2d,
10269
-+	0xfe, 0x9f, 0xae, 0x76, 0xf6, 0x2b, 0x16, 0x3c, 0x99, 0xd9, 0x5f, 0xc3, 0xa6, 0x62, 0x0e, 0xca,
10270
-+	0x0d, 0x5a, 0xa8, 0xf9, 0x4d, 0x25, 0x0e, 0xa5, 0x12, 0x80, 0x13, 0x1c, 0xc3, 0x74, 0xa2, 0xd0,
10271
-+	0xd3, 0x74, 0xe2, 0x5f, 0x58, 0xd0, 0xb1, 0x80, 0x4f, 0xe1, 0x24, 0x5d, 0x31, 0x4f, 0xd2, 0x8f,
10272
-+	0xf7, 0x33, 0x97, 0x39, 0x87, 0xe8, 0xbf, 0x99, 0x84, 0xf3, 0x39, 0x8e, 0x12, 0x7b, 0x30, 0xb5,
10273
-+	0xd5, 0x20, 0xa6, 0x47, 0x9a, 0xf8, 0x98, 0x4c, 0xe7, 0xbd, 0xae, 0xee, 0x6b, 0x2c, 0x0d, 0xcf,
10274
-+	0x54, 0x07, 0x0a, 0xee, 0x6c, 0x02, 0x7d, 0xc5, 0x82, 0xb3, 0xce, 0x83, 0xa8, 0x23, 0xd9, 0xa2,
10275
-+	0x58, 0x33, 0x2f, 0x65, 0x6a, 0x29, 0x7a, 0x24, 0x67, 0xe4, 0x79, 0x89, 0xb2, 0xb0, 0x70, 0x66,
10276
-+	0x5b, 0x08, 0x8b, 0xf8, 0x95, 0x94, 0xdf, 0xee, 0xe2, 0x33, 0x99, 0xe5, 0xd1, 0xc2, 0xcf, 0x54,
10277
-+	0x09, 0xc1, 0x8a, 0x0e, 0xba, 0x0f, 0xe5, 0x2d, 0xe9, 0x66, 0x26, 0xce, 0xec, 0xcc, 0x4b, 0x30,
10278
-+	0xd3, 0x17, 0x8d, 0xbf, 0x1b, 0x2a, 0x10, 0x4e, 0x48, 0xa1, 0xd7, 0xa1, 0xe8, 0x6f, 0x46, 0xdd,
10279
-+	0xb2, 0xec, 0xa4, 0x4c, 0x8d, 0xb8, 0x3f, 0xf2, 0xda, 0x72, 0x1d, 0xd3, 0x8a, 0xe8, 0x16, 0x14,
10280
-+	0xc3, 0x8d, 0xa6, 0x50, 0xac, 0x65, 0xf2, 0xa5, 0x78, 0xa1, 0x9a, 0xbd, 0x48, 0x38, 0x25, 0xbc,
10281
-+	0x50, 0xc5, 0x94, 0x04, 0xaa, 0xc1, 0x00, 0xf3, 0x29, 0x10, 0xfa, 0xb3, 0x4c, 0x86, 0xb4, 0x8b,
10282
-+	0x6f, 0x0e, 0x77, 0x5a, 0x66, 0x08, 0x98, 0x13, 0x42, 0xeb, 0x30, 0xd8, 0x60, 0x19, 0x59, 0x44,
10283
-+	0xc8, 0xe4, 0x4f, 0x65, 0xaa, 0xd0, 0xba, 0xa4, 0xaa, 0x11, 0x1a, 0x25, 0x86, 0x81, 0x05, 0x2d,
10284
-+	0x46, 0x95, 0xb4, 0xb6, 0x37, 0x23, 0x26, 0x82, 0xe7, 0x51, 0xed, 0x92, 0x81, 0x49, 0x50, 0x65,
10285
-+	0x18, 0x58, 0xd0, 0x42, 0x9f, 0x81, 0xc2, 0x66, 0x43, 0xb8, 0x1c, 0x64, 0xea, 0xd2, 0x4c, 0x97,
10286
-+	0xf2, 0x85, 0xc1, 0xc3, 0x83, 0x4a, 0x61, 0x79, 0x11, 0x17, 0x36, 0x1b, 0x68, 0x0d, 0x86, 0x36,
10287
-+	0xb9, 0x13, 0xaa, 0x50, 0x97, 0x3d, 0x9d, 0xed, 0x1f, 0xdb, 0xe1, 0xa7, 0xca, 0x4d, 0xe5, 0x05,
10288
-+	0x00, 0x4b, 0x22, 0x2c, 0x08, 0xa4, 0x72, 0xa6, 0x15, 0xd1, 0x90, 0x67, 0x8f, 0xe7, 0x00, 0xcd,
10289
-+	0xdd, 0xdb, 0x13, 0x97, 0x5c, 0xac, 0x51, 0x44, 0x5f, 0x86, 0xb2, 0x23, 0xd3, 0xfc, 0x89, 0x68,
10290
-+	0x11, 0x2f, 0x66, 0x6e, 0xcc, 0xee, 0x19, 0x10, 0xf9, 0xaa, 0x56, 0x48, 0x38, 0x21, 0x8a, 0x76,
10291
-+	0x60, 0x6c, 0x2f, 0x6a, 0x6d, 0x13, 0xb9, 0x91, 0x59, 0xf0, 0x88, 0x9c, 0x8b, 0xeb, 0xbe, 0x40,
10292
-+	0x74, 0xc3, 0xb8, 0xed, 0x78, 0x1d, 0x67, 0x0f, 0x7b, 0x6c, 0xbe, 0xaf, 0x13, 0xc3, 0x26, 0x6d,
10293
-+	0x3a, 0xfc, 0xef, 0xb5, 0x83, 0x8d, 0xfd, 0x98, 0x88, 0xf0, 0xc9, 0x99, 0xc3, 0xff, 0x26, 0x47,
10294
-+	0xe9, 0x1c, 0x7e, 0x01, 0xc0, 0x92, 0x08, 0xfa, 0x12, 0x8c, 0x34, 0x92, 0x64, 0x61, 0x2c, 0x70,
10295
-+	0x72, 0xce, 0x7b, 0x54, 0x4e, 0x4e, 0x31, 0x1e, 0xcd, 0x4e, 0x03, 0x62, 0x9d, 0x20, 0x3b, 0x23,
10296
-+	0x5b, 0xdb, 0x41, 0x1c, 0xf8, 0xa9, 0xf3, 0x79, 0x2a, 0xff, 0x8c, 0xac, 0x65, 0xe0, 0x77, 0x9e,
10297
-+	0x91, 0x59, 0x58, 0x38, 0xb3, 0x2d, 0xd4, 0x84, 0xf1, 0x56, 0x10, 0xc6, 0x0f, 0x82, 0x50, 0xae,
10298
-+	0x33, 0xd4, 0x45, 0xec, 0x37, 0x30, 0x45, 0x8b, 0x2c, 0xac, 0xb7, 0x09, 0xc1, 0x29, 0x9a, 0xe8,
10299
-+	0xf3, 0x30, 0x14, 0x35, 0x1c, 0x8f, 0xac, 0xdc, 0x9d, 0x3e, 0x93, 0x7f, 0xf9, 0xd4, 0x39, 0x4a,
10300
-+	0xce, 0x2a, 0x63, 0x93, 0x24, 0x50, 0xb0, 0x24, 0x87, 0x96, 0x61, 0x80, 0xc5, 0xe6, 0x67, 0x11,
10301
-+	0xa0, 0x73, 0xa2, 0x13, 0x75, 0x18, 0x77, 0xf2, 0x33, 0x8a, 0x15, 0x63, 0x5e, 0x9d, 0xee, 0x05,
10302
-+	0xc1, 0xfd, 0x06, 0xd1, 0xf4, 0xb9, 0xfc, 0xbd, 0x20, 0x98, 0xe6, 0xbb, 0xf5, 0x6e, 0x7b, 0x41,
10303
-+	0x21, 0xe1, 0x84, 0x28, 0x3d, 0xa1, 0xe9, 0xa9, 0x7a, 0xbe, 0x8b, 0xbd, 0x49, 0xee, 0x99, 0xca,
10304
-+	0x4e, 0x68, 0x7a, 0xa2, 0x52, 0x12, 0xf4, 0x0e, 0x72, 0x64, 0x6e, 0xd7, 0xe9, 0x0b, 0xf9, 0x77,
10305
-+	0x50, 0x66, 0x02, 0x58, 0x6d, 0xb7, 0xb2, 0x65, 0x91, 0x90, 0xb2, 0x7f, 0x6f, 0xa8, 0x93, 0x13,
10306
-+	0x62, 0x72, 0xd8, 0x5f, 0xb6, 0x3a, 0x9e, 0xe8, 0x3e, 0xdd, 0xaf, 0x5a, 0xe8, 0x04, 0x79, 0xe0,
10307
-+	0xaf, 0x58, 0x70, 0xbe, 0x95, 0x39, 0x40, 0x82, 0xad, 0xe8, 0x4f, 0xbb, 0xc4, 0x87, 0x41, 0x45,
10308
-+	0x7f, 0xcf, 0x86, 0xe3, 0x9c, 0x96, 0xd2, 0x72, 0x46, 0xf1, 0x03, 0xcb, 0x19, 0xab, 0x30, 0xcc,
10309
-+	0x58, 0xd7, 0x1e, 0x19, 0xd0, 0xd2, 0x5e, 0x6e, 0x8c, 0x41, 0x59, 0x14, 0x15, 0xb1, 0x22, 0x81,
10310
-+	0x7e, 0xd8, 0x82, 0xcb, 0xe9, 0xae, 0x63, 0xc2, 0xc0, 0x22, 0x56, 0x3a, 0x17, 0x01, 0x97, 0xc5,
10311
-+	0xf7, 0x5f, 0xae, 0x75, 0x43, 0x3e, 0xea, 0x85, 0x80, 0xbb, 0x37, 0x86, 0xaa, 0x19, 0x32, 0xe8,
10312
-+	0xa0, 0xa9, 0x77, 0xef, 0x43, 0x0e, 0x7d, 0x09, 0x46, 0x77, 0x83, 0xb6, 0x1f, 0x0b, 0xb3, 0x17,
10313
-+	0xe1, 0x84, 0xc8, 0xde, 0x99, 0x57, 0xb5, 0x72, 0x6c, 0x60, 0xa5, 0xa4, 0xd7, 0xe1, 0x47, 0x95,
10314
-+	0x5e, 0xd1, 0x3b, 0xa9, 0x94, 0xda, 0xe5, 0xfc, 0x98, 0x7c, 0x42, 0xd0, 0x3f, 0x46, 0x62, 0xed,
10315
-+	0xd3, 0x95, 0xb8, 0x7e, 0xce, 0xca, 0x10, 0x15, 0xb8, 0x0c, 0xfe, 0x59, 0x53, 0x06, 0xbf, 0x96,
10316
-+	0x96, 0xc1, 0x3b, 0x74, 0xae, 0x86, 0xf8, 0xdd, 0x7f, 0x60, 0xe7, 0x7e, 0x23, 0xa5, 0xd9, 0x1e,
10317
-+	0x5c, 0xed, 0x75, 0xdd, 0x31, 0xfb, 0xa7, 0xa6, 0x7a, 0x61, 0x4b, 0xec, 0x9f, 0x9a, 0x2b, 0x55,
10318
-+	0xcc, 0x20, 0x7d, 0xe7, 0xeb, 0xfc, 0x6f, 0x16, 0x14, 0x6b, 0x41, 0xf3, 0x14, 0x74, 0xc8, 0x9f,
10319
-+	0x33, 0x74, 0xc8, 0x4f, 0xe4, 0xa4, 0x3a, 0xcf, 0xd5, 0x18, 0x2f, 0xa5, 0x34, 0xc6, 0x97, 0xf3,
10320
-+	0x08, 0x74, 0xd7, 0x0f, 0xff, 0x74, 0x11, 0xf4, 0xc4, 0xec, 0xe8, 0x5f, 0x3d, 0x8a, 0xf1, 0x71,
10321
-+	0xb1, 0x5b, 0xae, 0x76, 0x41, 0x99, 0x99, 0x4d, 0x49, 0xbf, 0xba, 0x3f, 0x67, 0x36, 0xc8, 0x6f,
10322
-+	0x11, 0x77, 0x6b, 0x3b, 0x26, 0xcd, 0xf4, 0xe7, 0x9c, 0x9e, 0x0d, 0xf2, 0x7f, 0xb1, 0x60, 0x22,
10323
-+	0xd5, 0x3a, 0xf2, 0x60, 0xcc, 0xd3, 0x15, 0x80, 0x62, 0x9d, 0x3e, 0x92, 0xee, 0x50, 0xd8, 0x70,
10324
-+	0x6a, 0x45, 0xd8, 0x24, 0x8e, 0x66, 0x01, 0xd4, 0x03, 0x9d, 0xd4, 0xab, 0x31, 0xa9, 0x42, 0xbd,
10325
-+	0xe0, 0x45, 0x58, 0xc3, 0x40, 0x2f, 0xc3, 0x48, 0x1c, 0xb4, 0x02, 0x2f, 0xd8, 0xda, 0xbf, 0x4d,
10326
-+	0x64, 0xf0, 0x16, 0x65, 0x99, 0xb5, 0x9e, 0x80, 0xb0, 0x8e, 0x67, 0xff, 0x6c, 0x11, 0xd2, 0xc9,
10327
-+	0xfc, 0xbf, 0xb5, 0x26, 0x3f, 0x9a, 0x6b, 0xf2, 0x9b, 0x16, 0x4c, 0xd2, 0xd6, 0x99, 0x95, 0x88,
10328
-+	0xbc, 0x6c, 0x55, 0x82, 0x19, 0xab, 0x4b, 0x82, 0x99, 0x6b, 0xf4, 0xec, 0x6a, 0x06, 0xed, 0x58,
10329
-+	0xe8, 0xe5, 0xb4, 0xc3, 0x89, 0x96, 0x62, 0x01, 0x15, 0x78, 0x24, 0x0c, 0x85, 0xeb, 0x93, 0x8e,
10330
-+	0x47, 0xc2, 0x10, 0x0b, 0xa8, 0xcc, 0x3f, 0x53, 0xca, 0xc9, 0x3f, 0xc3, 0x42, 0xd1, 0x09, 0x7b,
10331
-+	0x02, 0xc1, 0xf6, 0x68, 0xa1, 0xe8, 0xa4, 0xa1, 0x41, 0x82, 0x63, 0xff, 0x62, 0x11, 0x46, 0x6b,
10332
-+	0x41, 0x33, 0x79, 0x22, 0x7b, 0xc9, 0x78, 0x22, 0xbb, 0x9a, 0x7a, 0x22, 0x9b, 0xd4, 0x71, 0xbf,
10333
-+	0xf5, 0x20, 0xf6, 0x61, 0x3d, 0x88, 0xfd, 0x73, 0x8b, 0xcd, 0x5a, 0x75, 0xad, 0x2e, 0xf2, 0xdf,
10334
-+	0xbe, 0x00, 0x23, 0xec, 0x40, 0x62, 0xbe, 0x76, 0xf2, 0xdd, 0x88, 0x09, 0xe3, 0x6b, 0x49, 0x31,
10335
-+	0xd6, 0x71, 0xd0, 0x75, 0x18, 0x8e, 0x88, 0x13, 0x36, 0xb6, 0xd5, 0x19, 0x27, 0x5e, 0x55, 0x78,
10336
-+	0x19, 0x56, 0x50, 0xf4, 0x66, 0x12, 0x05, 0xad, 0x98, 0x9f, 0xc9, 0x55, 0xef, 0x0f, 0xdf, 0x22,
10337
-+	0xf9, 0xa1, 0xcf, 0xec, 0xb7, 0x00, 0x75, 0xe2, 0xf7, 0x11, 0xef, 0xa8, 0x62, 0xc6, 0x3b, 0x2a,
10338
-+	0x77, 0xc4, 0x3a, 0xfa, 0x53, 0x0b, 0xc6, 0x6b, 0x41, 0x93, 0x6e, 0xdd, 0xbf, 0x48, 0xfb, 0x54,
10339
-+	0x0f, 0x01, 0x39, 0xd8, 0x25, 0x04, 0xe4, 0xdf, 0xb3, 0x60, 0xa8, 0x16, 0x34, 0x4f, 0x41, 0x9b,
10340
-+	0xff, 0x59, 0x53, 0x9b, 0x7f, 0x21, 0x67, 0x49, 0xe4, 0x28, 0xf0, 0x7f, 0xb9, 0x08, 0x63, 0xb4,
10341
-+	0x9f, 0xc1, 0x96, 0x9c, 0x25, 0x63, 0x44, 0xac, 0x3e, 0x46, 0x84, 0xb2, 0xb9, 0x81, 0xe7, 0x05,
10342
-+	0x0f, 0xd2, 0x33, 0xb6, 0xcc, 0x4a, 0xb1, 0x80, 0xa2, 0xe7, 0x60, 0xb8, 0x15, 0x92, 0x3d, 0x37,
10343
-+	0x10, 0xfc, 0xa3, 0xf6, 0x36, 0x52, 0x13, 0xe5, 0x58, 0x61, 0x50, 0xb9, 0x2b, 0x72, 0xfd, 0x06,
10344
-+	0x91, 0x69, 0xa4, 0x4b, 0x2c, 0xd3, 0x14, 0x8f, 0xed, 0xac, 0x95, 0x63, 0x03, 0x0b, 0xbd, 0x05,
10345
-+	0x65, 0xf6, 0x9f, 0x9d, 0x28, 0xc7, 0xcf, 0x8c, 0x23, 0x12, 0x2a, 0x08, 0x02, 0x38, 0xa1, 0x85,
10346
-+	0x6e, 0x00, 0xc4, 0x32, 0xfe, 0x6f, 0x24, 0xc2, 0xd6, 0x28, 0x5e, 0x5b, 0x45, 0x06, 0x8e, 0xb0,
10347
-+	0x86, 0x85, 0x9e, 0x85, 0x72, 0xec, 0xb8, 0xde, 0x1d, 0xd7, 0x27, 0x11, 0x53, 0x69, 0x17, 0x65,
10348
-+	0xbe, 0x04, 0x51, 0x88, 0x13, 0x38, 0xe5, 0x75, 0x98, 0x4f, 0x37, 0xcf, 0xab, 0x35, 0xcc, 0xb0,
10349
-+	0x19, 0xaf, 0x73, 0x47, 0x95, 0x62, 0x0d, 0xc3, 0x7e, 0x15, 0xce, 0xd5, 0x82, 0x66, 0x2d, 0x08,
10350
-+	0xe3, 0xe5, 0x20, 0x7c, 0xe0, 0x84, 0x4d, 0x39, 0x7f, 0x15, 0x19, 0xba, 0x9f, 0x9e, 0x3d, 0x03,
10351
-+	0x7c, 0x67, 0x1a, 0x41, 0xf9, 0x5f, 0x64, 0xdc, 0xce, 0x31, 0x7d, 0x39, 0x1a, 0xec, 0xde, 0x55,
10352
-+	0x29, 0xf4, 0x6e, 0x3a, 0x31, 0x41, 0x77, 0x59, 0xda, 0xad, 0xe4, 0x0a, 0x12, 0xd5, 0x9f, 0xd1,
10353
-+	0xd2, 0x6e, 0x25, 0xc0, 0xcc, 0x3b, 0xcb, 0xac, 0x6f, 0xff, 0x7a, 0x91, 0x9d, 0x46, 0xa9, 0x8c,
10354
-+	0x72, 0xe8, 0x4b, 0x30, 0x1e, 0x91, 0x3b, 0xae, 0xdf, 0x7e, 0x28, 0x85, 0xf0, 0x2e, 0xde, 0x38,
10355
-+	0xf5, 0x25, 0x1d, 0x93, 0xab, 0x08, 0xcd, 0x32, 0x9c, 0xa2, 0x46, 0xe7, 0x29, 0x6c, 0xfb, 0xf3,
10356
-+	0xd1, 0xbd, 0x88, 0x84, 0x22, 0xa3, 0x19, 0x9b, 0x27, 0x2c, 0x0b, 0x71, 0x02, 0xa7, 0xeb, 0x92,
10357
-+	0xfd, 0x59, 0x0b, 0x7c, 0x1c, 0x04, 0xb1, 0x5c, 0xc9, 0x2c, 0x27, 0x8e, 0x56, 0x8e, 0x0d, 0x2c,
10358
-+	0xb4, 0x0c, 0x28, 0x6a, 0xb7, 0x5a, 0x1e, 0x7b, 0xcf, 0x77, 0xbc, 0x9b, 0x61, 0xd0, 0x6e, 0xf1,
10359
-+	0xb7, 0xd4, 0xe2, 0xc2, 0x79, 0x7a, 0x85, 0xd5, 0x3b, 0xa0, 0x38, 0xa3, 0x06, 0x3d, 0x7d, 0x36,
10360
-+	0x23, 0xf6, 0x9b, 0xad, 0xee, 0xa2, 0x50, 0xdf, 0xd7, 0x59, 0x11, 0x96, 0x30, 0xba, 0x98, 0x58,
10361
-+	0xf3, 0x1c, 0x73, 0x30, 0x59, 0x4c, 0x58, 0x95, 0x62, 0x0d, 0x03, 0x2d, 0xc1, 0x50, 0xb4, 0x1f,
10362
-+	0x35, 0x62, 0x11, 0x64, 0x29, 0x27, 0x37, 0x65, 0x9d, 0xa1, 0x68, 0xf9, 0x12, 0x78, 0x15, 0x2c,
10363
-+	0xeb, 0xda, 0xdf, 0xc3, 0x2e, 0x43, 0x96, 0xff, 0x2a, 0x6e, 0x87, 0x04, 0xed, 0xc2, 0x58, 0x8b,
10364
-+	0x4d, 0xb9, 0x88, 0xce, 0x2c, 0xe6, 0xed, 0xa5, 0x3e, 0xa5, 0xda, 0x07, 0xf4, 0xa0, 0x51, 0x5a,
10365
-+	0x27, 0x26, 0x2e, 0xd4, 0x74, 0x72, 0xd8, 0xa4, 0x6e, 0xff, 0xe0, 0x14, 0x3b, 0x73, 0xeb, 0x5c,
10366
-+	0x54, 0x1d, 0x12, 0x16, 0xc5, 0x82, 0x2f, 0x9f, 0xc9, 0xd7, 0x99, 0x24, 0x5f, 0x24, 0xac, 0x92,
10367
-+	0xb1, 0xac, 0x8b, 0xde, 0x64, 0x6f, 0xdf, 0xfc, 0xa0, 0xeb, 0x95, 0x86, 0x98, 0x63, 0x19, 0xcf,
10368
-+	0xdc, 0xa2, 0x22, 0xd6, 0x88, 0xa0, 0x3b, 0x30, 0x26, 0xd2, 0x25, 0x09, 0xa5, 0x58, 0xd1, 0x50,
10369
-+	0x7a, 0x8c, 0x61, 0x1d, 0x78, 0x94, 0x2e, 0xc0, 0x66, 0x65, 0xb4, 0x05, 0x97, 0xb5, 0xdc, 0x81,
10370
-+	0x37, 0x43, 0x87, 0xbd, 0x87, 0xba, 0x6c, 0x13, 0x69, 0xe7, 0xe6, 0x93, 0x87, 0x07, 0x95, 0xcb,
10371
-+	0xeb, 0xdd, 0x10, 0x71, 0x77, 0x3a, 0xe8, 0x2e, 0x9c, 0xe3, 0x8e, 0x7b, 0x55, 0xe2, 0x34, 0x3d,
10372
-+	0xd7, 0x57, 0x07, 0x33, 0x5f, 0x87, 0x17, 0x0f, 0x0f, 0x2a, 0xe7, 0xe6, 0xb3, 0x10, 0x70, 0x76,
10373
-+	0x3d, 0xf4, 0x59, 0x28, 0x37, 0xfd, 0x48, 0x8c, 0xc1, 0xa0, 0x91, 0x16, 0xb3, 0x5c, 0x5d, 0xab,
10374
-+	0xab, 0xef, 0x4f, 0xfe, 0xe0, 0xa4, 0x02, 0xda, 0xe2, 0x8a, 0x31, 0x25, 0x87, 0x0e, 0xe5, 0xa7,
10375
-+	0x40, 0x17, 0x4b, 0xc2, 0x70, 0xdd, 0xe1, 0x1a, 0x61, 0x65, 0xfa, 0x6a, 0x78, 0xf5, 0x18, 0x84,
10376
-+	0xd1, 0x1b, 0x80, 0x28, 0xa3, 0xe6, 0x36, 0xc8, 0x7c, 0x83, 0x05, 0xc9, 0x66, 0x7a, 0xc4, 0x61,
10377
-+	0xc3, 0x55, 0x02, 0xd5, 0x3b, 0x30, 0x70, 0x46, 0x2d, 0x74, 0x8b, 0x1e, 0x64, 0x7a, 0xa9, 0x30,
10378
-+	0xe1, 0x95, 0xcc, 0xfd, 0x74, 0x95, 0xb4, 0x42, 0xd2, 0x70, 0x62, 0xd2, 0x34, 0x29, 0xe2, 0x54,
10379
-+	0x3d, 0x7a, 0x97, 0xaa, 0x7c, 0x39, 0x60, 0x46, 0xc2, 0xe8, 0xcc, 0x99, 0x43, 0xe5, 0xe2, 0xed,
10380
-+	0x20, 0x8a, 0xd7, 0x48, 0xfc, 0x20, 0x08, 0x77, 0x44, 0xe0, 0xb1, 0x24, 0x06, 0x66, 0x02, 0xc2,
10381
-+	0x3a, 0x1e, 0xe5, 0x83, 0xd9, 0xe3, 0xf3, 0x4a, 0x95, 0xbd, 0x00, 0x0e, 0x27, 0xfb, 0xe4, 0x16,
10382
-+	0x2f, 0xc6, 0x12, 0x2e, 0x51, 0x57, 0x6a, 0x8b, 0xec, 0x35, 0x2f, 0x85, 0xba, 0x52, 0x5b, 0xc4,
10383
-+	0x12, 0x8e, 0x48, 0x67, 0xca, 0xd1, 0xf1, 0x7c, 0xad, 0x66, 0xe7, 0x75, 0xd0, 0x67, 0xd6, 0x51,
10384
-+	0x1f, 0x26, 0x55, 0xb2, 0x53, 0x1e, 0x91, 0x2d, 0x9a, 0x9e, 0x60, 0x8b, 0xa4, 0xff, 0x70, 0x6e,
10385
-+	0x4a, 0x4f, 0xbc, 0x92, 0xa2, 0x84, 0x3b, 0x68, 0x1b, 0xb1, 0x49, 0x26, 0x7b, 0xe6, 0x3b, 0x9a,
10386
-+	0x83, 0x72, 0xd4, 0xde, 0x68, 0x06, 0xbb, 0x8e, 0xeb, 0xb3, 0x47, 0x37, 0x8d, 0xc9, 0xaa, 0x4b,
10387
-+	0x00, 0x4e, 0x70, 0xd0, 0x32, 0x0c, 0x3b, 0x52, 0x09, 0x8c, 0xf2, 0x83, 0x15, 0x28, 0xd5, 0x2f,
10388
-+	0xf7, 0xdf, 0x95, 0x6a, 0x5f, 0x55, 0x17, 0xbd, 0x06, 0x63, 0xc2, 0x5d, 0x8b, 0x87, 0x70, 0x60,
10389
-+	0x8f, 0x62, 0x9a, 0x3d, 0x7e, 0x5d, 0x07, 0x62, 0x13, 0x17, 0x7d, 0x11, 0xc6, 0x29, 0x95, 0xe4,
10390
-+	0x60, 0x9b, 0x3e, 0xdb, 0xcf, 0x89, 0xa8, 0xe5, 0xb1, 0xd0, 0x2b, 0xe3, 0x14, 0x31, 0xd4, 0x84,
10391
-+	0x4b, 0x4e, 0x3b, 0x0e, 0x98, 0x22, 0xdd, 0x5c, 0xff, 0xeb, 0xc1, 0x0e, 0xf1, 0xd9, 0xdb, 0xd8,
10392
-+	0xf0, 0xc2, 0xd5, 0xc3, 0x83, 0xca, 0xa5, 0xf9, 0x2e, 0x78, 0xb8, 0x2b, 0x15, 0x74, 0x0f, 0x46,
10393
-+	0xe2, 0xc0, 0x63, 0x96, 0xf1, 0x94, 0x95, 0x38, 0x9f, 0x1f, 0xdb, 0x67, 0x5d, 0xa1, 0xe9, 0x4a,
10394
-+	0x24, 0x55, 0x15, 0xeb, 0x74, 0xd0, 0x3a, 0xdf, 0x63, 0x2c, 0xea, 0x29, 0x89, 0xa6, 0x2f, 0xe4,
10395
-+	0x0f, 0x8c, 0x0a, 0x8e, 0x6a, 0x6e, 0x41, 0x51, 0x13, 0xeb, 0x64, 0xd0, 0x4d, 0x98, 0x6a, 0x85,
10396
-+	0x6e, 0xc0, 0x16, 0xb6, 0x7a, 0xc4, 0x98, 0x36, 0x53, 0x17, 0xd4, 0xd2, 0x08, 0xb8, 0xb3, 0x0e,
10397
-+	0x15, 0x32, 0x65, 0xe1, 0xf4, 0x45, 0x9e, 0x07, 0x8b, 0x33, 0xde, 0xbc, 0x0c, 0x2b, 0x28, 0x5a,
10398
-+	0x65, 0xe7, 0x32, 0x17, 0x07, 0xa7, 0x67, 0xf2, 0x83, 0x3c, 0xe8, 0x62, 0x23, 0xe7, 0x97, 0xd4,
10399
-+	0x5f, 0x9c, 0x50, 0xa0, 0xf7, 0x46, 0xb4, 0xed, 0x84, 0xa4, 0x16, 0x06, 0x0d, 0xc2, 0x3b, 0xc3,
10400
-+	0x8d, 0xf2, 0x9f, 0xe0, 0xc1, 0x19, 0xe9, 0xbd, 0x51, 0xcf, 0x42, 0xc0, 0xd9, 0xf5, 0x50, 0x53,
10401
-+	0x4b, 0xff, 0x4c, 0xd9, 0xd0, 0x68, 0xfa, 0x52, 0x17, 0x33, 0xa6, 0x14, 0xcf, 0x9a, 0xac, 0x45,
10402
-+	0xa3, 0x38, 0xc2, 0x29, 0x9a, 0x33, 0xdf, 0x0e, 0x53, 0x1d, 0xf7, 0xc5, 0xb1, 0xe2, 0x82, 0xff,
10403
-+	0xc9, 0x00, 0x94, 0x95, 0x2a, 0x1c, 0xcd, 0x99, 0x2f, 0x1c, 0x17, 0xd3, 0x2f, 0x1c, 0xc3, 0x94,
10404
-+	0x23, 0xd7, 0x1f, 0x35, 0xd6, 0x0d, 0xa3, 0xbb, 0x42, 0x7e, 0x16, 0x2e, 0x9d, 0xa7, 0xee, 0xe9,
10405
-+	0x61, 0xa7, 0x69, 0x36, 0x8a, 0x7d, 0x3f, 0x95, 0x94, 0xba, 0x2a, 0x4b, 0xfa, 0x4c, 0x82, 0x4b,
10406
-+	0x85, 0xff, 0x56, 0xd0, 0x5c, 0xa9, 0xa5, 0xb3, 0x42, 0xd6, 0x68, 0x21, 0xe6, 0x30, 0x26, 0xbe,
10407
-+	0x51, 0xe6, 0x86, 0x89, 0x6f, 0x43, 0x8f, 0x28, 0xbe, 0x49, 0x02, 0x38, 0xa1, 0x85, 0x3c, 0x98,
10408
-+	0x6a, 0x98, 0x09, 0x3d, 0x95, 0x57, 0xdd, 0x53, 0x3d, 0x53, 0x6b, 0xb6, 0xb5, 0xec, 0x69, 0x8b,
10409
-+	0x69, 0x2a, 0xb8, 0x93, 0x30, 0x7a, 0x0d, 0x86, 0xdf, 0x0b, 0x22, 0xb6, 0xf9, 0xc4, 0x0d, 0x2f,
10410
-+	0xbd, 0x8f, 0x86, 0xdf, 0xbc, 0x5b, 0x67, 0xe5, 0x47, 0x07, 0x95, 0x91, 0x5a, 0xd0, 0x94, 0x7f,
10411
-+	0xb1, 0xaa, 0x80, 0x1e, 0xc2, 0x39, 0xe3, 0x5c, 0x54, 0xdd, 0x85, 0xfe, 0xbb, 0x7b, 0x59, 0x34,
10412
-+	0x77, 0x6e, 0x25, 0x8b, 0x12, 0xce, 0x6e, 0x80, 0x1e, 0x36, 0x7e, 0x20, 0x92, 0xe1, 0x4a, 0x2e,
10413
-+	0x82, 0x31, 0x0b, 0x65, 0xdd, 0xf7, 0x3c, 0x85, 0x80, 0x3b, 0xeb, 0xd8, 0x5f, 0xe3, 0x2f, 0x07,
10414
-+	0x42, 0xbf, 0x48, 0xa2, 0xb6, 0x77, 0x1a, 0xb9, 0x96, 0x96, 0x0c, 0xd5, 0xe7, 0x23, 0xbf, 0x4e,
10415
-+	0xfd, 0xa6, 0xc5, 0x5e, 0xa7, 0xd6, 0xc9, 0x6e, 0xcb, 0xa3, 0x52, 0xee, 0xe3, 0xef, 0xf8, 0x9b,
10416
-+	0x30, 0x1c, 0x8b, 0xd6, 0xba, 0xa5, 0x87, 0xd2, 0x3a, 0xc5, 0x5e, 0xe8, 0x14, 0x7f, 0x21, 0x4b,
10417
-+	0xb1, 0x22, 0x63, 0xff, 0x53, 0x3e, 0x03, 0x12, 0x72, 0x0a, 0x6a, 0xa8, 0xaa, 0xa9, 0x86, 0xaa,
10418
-+	0xf4, 0xf8, 0x82, 0x1c, 0x75, 0xd4, 0x3f, 0x31, 0xfb, 0xcd, 0x44, 0xb9, 0x8f, 0xfa, 0xb3, 0xa8,
10419
-+	0xfd, 0x63, 0x16, 0x9c, 0xcd, 0xb2, 0x4f, 0xa2, 0x3c, 0x21, 0x17, 0x24, 0xd5, 0x33, 0xb1, 0x1a,
10420
-+	0xc1, 0xfb, 0xa2, 0x1c, 0x2b, 0x8c, 0xbe, 0x33, 0x2f, 0x1c, 0x2f, 0x3c, 0xdb, 0x5d, 0x18, 0xab,
10421
-+	0x85, 0x44, 0xbb, 0x03, 0x5e, 0xe7, 0x6e, 0x6c, 0xbc, 0x3f, 0xcf, 0x1d, 0xdb, 0x85, 0xcd, 0xfe,
10422
-+	0xf9, 0x02, 0x9c, 0xe5, 0xef, 0x3c, 0xf3, 0x7b, 0x81, 0xdb, 0xac, 0x05, 0x4d, 0x91, 0x35, 0xe3,
10423
-+	0x6d, 0x18, 0x6d, 0x69, 0xd2, 0x7f, 0xb7, 0x00, 0x51, 0xba, 0x96, 0x20, 0x91, 0xc2, 0xf4, 0x52,
10424
-+	0x6c, 0xd0, 0x42, 0x4d, 0x18, 0x25, 0x7b, 0x6e, 0x43, 0x3d, 0x16, 0x14, 0x8e, 0x7d, 0x37, 0xa8,
10425
-+	0x56, 0x96, 0x34, 0x3a, 0xd8, 0xa0, 0xfa, 0x18, 0x12, 0xa9, 0xd9, 0x3f, 0x6e, 0xc1, 0x85, 0x9c,
10426
-+	0x70, 0x52, 0xb4, 0xb9, 0x07, 0xec, 0x45, 0x4d, 0xe4, 0x64, 0x52, 0xcd, 0xf1, 0x77, 0x36, 0x2c,
10427
-+	0xa0, 0xe8, 0xf3, 0x00, 0xfc, 0x9d, 0x8c, 0x0a, 0x25, 0xbd, 0xe2, 0xee, 0x18, 0x21, 0x43, 0xb4,
10428
-+	0x50, 0x0f, 0xb2, 0x3e, 0xd6, 0x68, 0xd9, 0x3f, 0x53, 0x84, 0x01, 0xf6, 0x2e, 0x83, 0x96, 0x61,
10429
-+	0x68, 0x9b, 0x07, 0x4f, 0xee, 0x27, 0x4e, 0x73, 0x22, 0xdd, 0xf1, 0x02, 0x2c, 0x2b, 0xa3, 0x55,
10430
-+	0x38, 0xc3, 0x83, 0x4f, 0x7b, 0x55, 0xe2, 0x39, 0xfb, 0x52, 0x49, 0xc0, 0xf3, 0x18, 0xa9, 0xb0,
10431
-+	0x15, 0x2b, 0x9d, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x1d, 0xc6, 0x63, 0x77, 0x97, 0x04, 0xed, 0x58,
10432
-+	0x52, 0xe2, 0x61, 0xa7, 0x15, 0x1b, 0xb7, 0x6e, 0x40, 0x71, 0x0a, 0x9b, 0x8a, 0x3b, 0xad, 0x0e,
10433
-+	0x75, 0xc8, 0x40, 0x22, 0xee, 0x98, 0x2a, 0x10, 0x13, 0x97, 0x19, 0x10, 0xb5, 0x99, 0xb9, 0xd4,
10434
-+	0xfa, 0x76, 0x48, 0xa2, 0xed, 0xc0, 0x6b, 0x8a, 0x34, 0xd8, 0x89, 0x01, 0x51, 0x0a, 0x8e, 0x3b,
10435
-+	0x6a, 0x50, 0x2a, 0x9b, 0x8e, 0xeb, 0xb5, 0x43, 0x92, 0x50, 0x19, 0x34, 0xa9, 0x2c, 0xa7, 0xe0,
10436
-+	0xb8, 0xa3, 0x06, 0x5d, 0x47, 0xe7, 0x44, 0x5e, 0x6a, 0xe9, 0x4c, 0xaf, 0xac, 0xc2, 0x86, 0xa4,
10437
-+	0x5b, 0x51, 0x97, 0x68, 0x32, 0xc2, 0x6e, 0x46, 0x65, 0xb6, 0xd6, 0xb4, 0x78, 0xc2, 0xa1, 0x48,
10438
-+	0x52, 0x79, 0x94, 0xec, 0xc8, 0xbf, 0x67, 0xc1, 0x99, 0x0c, 0xeb, 0x56, 0x7e, 0x54, 0x6d, 0xb9,
10439
-+	0x51, 0xac, 0x72, 0xb5, 0x68, 0x47, 0x15, 0x2f, 0xc7, 0x0a, 0x83, 0xee, 0x07, 0x7e, 0x18, 0xa6,
10440
-+	0x0f, 0x40, 0x61, 0xdd, 0x25, 0xa0, 0xc7, 0x3b, 0x00, 0xd1, 0x55, 0x28, 0xb5, 0x23, 0x22, 0xe3,
10441
-+	0x40, 0xa9, 0xf3, 0x9b, 0xe9, 0x75, 0x19, 0x84, 0xb2, 0xa6, 0x5b, 0x4a, 0xa5, 0xaa, 0xb1, 0xa6,
10442
-+	0x5c, 0x4f, 0xca, 0x61, 0xf6, 0x57, 0x8b, 0x70, 0x31, 0xd7, 0x8e, 0x9d, 0x76, 0x69, 0x37, 0xf0,
10443
-+	0xdd, 0x38, 0x50, 0x6f, 0x7e, 0x3c, 0x12, 0x09, 0x69, 0x6d, 0xaf, 0x8a, 0x72, 0xac, 0x30, 0xd0,
10444
-+	0x35, 0x99, 0x21, 0x3d, 0x9d, 0x8d, 0x66, 0xa1, 0x6a, 0x24, 0x49, 0xef, 0x37, 0xd3, 0xd7, 0x53,
10445
-+	0x50, 0x6a, 0x05, 0x81, 0x97, 0x3e, 0x8c, 0x68, 0x77, 0x83, 0xc0, 0xc3, 0x0c, 0x88, 0x3e, 0x21,
10446
-+	0xc6, 0x21, 0xf5, 0xc8, 0x85, 0x9d, 0x66, 0x10, 0x69, 0x83, 0xf1, 0x0c, 0x0c, 0xed, 0x90, 0xfd,
10447
-+	0xd0, 0xf5, 0xb7, 0xd2, 0x8f, 0x9f, 0xb7, 0x79, 0x31, 0x96, 0x70, 0x33, 0x19, 0xc3, 0xd0, 0x49,
10448
-+	0xa7, 0xe8, 0x1a, 0xee, 0x79, 0xb5, 0xfd, 0x50, 0x11, 0x26, 0xf0, 0x42, 0xf5, 0x5b, 0x13, 0x71,
10449
-+	0xaf, 0x73, 0x22, 0x4e, 0x3a, 0x45, 0x57, 0xef, 0xd9, 0xf8, 0x65, 0x0b, 0x26, 0x58, 0xc0, 0x62,
10450
-+	0x11, 0xff, 0xc2, 0x0d, 0xfc, 0x53, 0x60, 0xdd, 0x9e, 0x82, 0x81, 0x90, 0x36, 0x9a, 0xce, 0xbb,
10451
-+	0xc3, 0x7a, 0x82, 0x39, 0x0c, 0x5d, 0x82, 0x12, 0xeb, 0x02, 0x9d, 0xbc, 0x51, 0x9e, 0xb2, 0xa0,
10452
-+	0xea, 0xc4, 0x0e, 0x66, 0xa5, 0xcc, 0xa9, 0x1b, 0x93, 0x96, 0xe7, 0xf2, 0x4e, 0x27, 0x0f, 0x0a,
10453
-+	0x1f, 0x0d, 0xa7, 0xee, 0xcc, 0xae, 0x7d, 0x30, 0xa7, 0xee, 0x6c, 0x92, 0xdd, 0xc5, 0xa2, 0xff,
10454
-+	0x5e, 0x80, 0x2b, 0x99, 0xf5, 0xfa, 0x76, 0xea, 0xee, 0x5e, 0xfb, 0x64, 0x6c, 0x58, 0xb2, 0x4d,
10455
-+	0x4b, 0x8a, 0xa7, 0x68, 0x5a, 0x52, 0xea, 0x97, 0x73, 0x1c, 0xe8, 0xc3, 0xd7, 0x3a, 0x73, 0xc8,
10456
-+	0x3e, 0x22, 0xbe, 0xd6, 0x99, 0x7d, 0xcb, 0x11, 0xeb, 0xfe, 0xac, 0x90, 0xf3, 0x2d, 0x4c, 0xc0,
10457
-+	0xbb, 0x4e, 0xcf, 0x19, 0x06, 0x8c, 0x04, 0x27, 0x3c, 0xca, 0xcf, 0x18, 0x5e, 0x86, 0x15, 0x14,
10458
-+	0xb9, 0x9a, 0xd7, 0x72, 0x21, 0x3f, 0x2b, 0x63, 0x6e, 0x53, 0xb3, 0xe6, 0xfb, 0x8f, 0x1a, 0x82,
10459
-+	0x0c, 0x0f, 0xe6, 0x55, 0x4d, 0x28, 0x2f, 0xf6, 0x2f, 0x94, 0x8f, 0x66, 0x0b, 0xe4, 0x68, 0x1e,
10460
-+	0x26, 0x76, 0x5d, 0x9f, 0x65, 0xd9, 0x37, 0x59, 0x51, 0x15, 0xc4, 0x63, 0xd5, 0x04, 0xe3, 0x34,
10461
-+	0xfe, 0xcc, 0x6b, 0x30, 0xf6, 0xe8, 0xea, 0xc8, 0x6f, 0x16, 0xe1, 0x89, 0x2e, 0xdb, 0x9e, 0x9f,
10462
-+	0xf5, 0xc6, 0x1c, 0x68, 0x67, 0x7d, 0xc7, 0x3c, 0xd4, 0xe0, 0xec, 0x66, 0xdb, 0xf3, 0xf6, 0x99,
10463
-+	0xf5, 0x26, 0x69, 0x4a, 0x0c, 0xc1, 0x2b, 0x5e, 0x92, 0x49, 0x22, 0x96, 0x33, 0x70, 0x70, 0x66,
10464
-+	0x4d, 0xf4, 0x06, 0xa0, 0x40, 0xa4, 0x84, 0xbd, 0x49, 0x7c, 0xa1, 0x55, 0x67, 0x03, 0x5f, 0x4c,
10465
-+	0x36, 0xe3, 0xdd, 0x0e, 0x0c, 0x9c, 0x51, 0x8b, 0x32, 0xfd, 0xf4, 0x56, 0xda, 0x57, 0xdd, 0x4a,
10466
-+	0x31, 0xfd, 0x58, 0x07, 0x62, 0x13, 0x17, 0xdd, 0x84, 0x29, 0x67, 0xcf, 0x71, 0x79, 0x70, 0x3b,
10467
-+	0x49, 0x80, 0x73, 0xfd, 0x4a, 0x09, 0x36, 0x9f, 0x46, 0xc0, 0x9d, 0x75, 0x52, 0x6e, 0xd3, 0x83,
10468
-+	0xf9, 0x6e, 0xd3, 0xdd, 0xcf, 0xc5, 0x5e, 0x3a, 0x5d, 0xfb, 0x3f, 0x59, 0xf4, 0xfa, 0xca, 0x48,
10469
-+	0xeb, 0x4e, 0xc7, 0x41, 0xe9, 0x26, 0x35, 0x0f, 0xe6, 0x73, 0x9a, 0x7d, 0x46, 0x02, 0xc4, 0x26,
10470
-+	0x2e, 0x5f, 0x10, 0x51, 0xe2, 0xe2, 0x62, 0xb0, 0xee, 0x22, 0x44, 0x81, 0xc2, 0x40, 0x5f, 0x80,
10471
-+	0xa1, 0xa6, 0xbb, 0xe7, 0x46, 0x41, 0x28, 0x36, 0xcb, 0x31, 0x1d, 0x05, 0x92, 0x73, 0xb0, 0xca,
10472
-+	0xc9, 0x60, 0x49, 0xcf, 0xfe, 0xa1, 0x02, 0x8c, 0xc9, 0x16, 0xdf, 0x6c, 0x07, 0xb1, 0x73, 0x0a,
10473
-+	0xd7, 0xf2, 0x4d, 0xe3, 0x5a, 0xfe, 0x44, 0xb7, 0x38, 0x0d, 0xac, 0x4b, 0xb9, 0xd7, 0xf1, 0xdd,
10474
-+	0xd4, 0x75, 0xfc, 0x74, 0x6f, 0x52, 0xdd, 0xaf, 0xe1, 0x7f, 0x66, 0xc1, 0x94, 0x81, 0x7f, 0x0a,
10475
-+	0xb7, 0xc1, 0xb2, 0x79, 0x1b, 0x3c, 0xd9, 0xf3, 0x1b, 0x72, 0x6e, 0x81, 0xef, 0x2b, 0xa6, 0xfa,
10476
-+	0xce, 0x4e, 0xff, 0xf7, 0xa0, 0xb4, 0xed, 0x84, 0xcd, 0x6e, 0xf1, 0x60, 0x3b, 0x2a, 0xcd, 0xde,
10477
-+	0x72, 0xc2, 0x26, 0x3f, 0xc3, 0x9f, 0x53, 0x89, 0x24, 0x9d, 0xb0, 0xd9, 0xd3, 0xa3, 0x8b, 0x35,
10478
-+	0x85, 0x5e, 0x85, 0xc1, 0xa8, 0x11, 0xb4, 0x94, 0xbd, 0xe5, 0x55, 0x9e, 0x64, 0x92, 0x96, 0x1c,
10479
-+	0x1d, 0x54, 0x90, 0xd9, 0x1c, 0x2d, 0xc6, 0x02, 0x1f, 0xbd, 0x0d, 0x63, 0xec, 0x97, 0xb2, 0x3b,
10480
-+	0x28, 0xe6, 0x67, 0x21, 0xa8, 0xeb, 0x88, 0xdc, 0x7c, 0xc5, 0x28, 0xc2, 0x26, 0xa9, 0x99, 0x2d,
10481
-+	0x28, 0xab, 0xcf, 0x7a, 0xac, 0x9e, 0x38, 0xff, 0xbe, 0x08, 0x67, 0x32, 0xd6, 0x1c, 0x8a, 0x8c,
10482
-+	0x99, 0x78, 0xa1, 0xcf, 0xa5, 0xfa, 0x01, 0xe7, 0x22, 0x62, 0xd2, 0x50, 0x53, 0xac, 0xad, 0xbe,
10483
-+	0x1b, 0xbd, 0x17, 0x91, 0x74, 0xa3, 0xb4, 0xa8, 0x77, 0xa3, 0xb4, 0xb1, 0x53, 0x1b, 0x6a, 0xda,
10484
-+	0x90, 0xea, 0xe9, 0x63, 0x9d, 0xd3, 0x3f, 0x2e, 0xc2, 0xd9, 0xac, 0xd0, 0x31, 0xe8, 0xbb, 0x53,
10485
-+	0xd9, 0x66, 0x5e, 0xea, 0x37, 0xe8, 0x0c, 0x4f, 0x41, 0x23, 0x72, 0x27, 0xcf, 0x9a, 0xf9, 0x67,
10486
-+	0x7a, 0x0e, 0xb3, 0x68, 0x93, 0xb9, 0x6f, 0x86, 0x3c, 0x4b, 0x90, 0x3c, 0x3e, 0x3e, 0xdd, 0x77,
10487
-+	0x07, 0x44, 0x7a, 0xa1, 0x28, 0xe5, 0xbe, 0x29, 0x8b, 0x7b, 0xbb, 0x6f, 0xca, 0x96, 0x67, 0x5c,
10488
-+	0x18, 0xd1, 0xbe, 0xe6, 0xb1, 0xce, 0xf8, 0x0e, 0xbd, 0xad, 0xb4, 0x7e, 0x3f, 0xd6, 0x59, 0xff,
10489
-+	0x71, 0x0b, 0x52, 0xc6, 0x8d, 0x4a, 0xdd, 0x65, 0xe5, 0xaa, 0xbb, 0xae, 0x42, 0x29, 0x0c, 0x3c,
10490
-+	0x92, 0x4e, 0x00, 0x83, 0x03, 0x8f, 0x60, 0x06, 0xa1, 0x18, 0x71, 0xa2, 0xec, 0x18, 0xd5, 0x05,
10491
-+	0x39, 0x21, 0xa2, 0x3d, 0x05, 0x03, 0x1e, 0xd9, 0x23, 0x5e, 0x3a, 0xba, 0xfa, 0x1d, 0x5a, 0x88,
10492
-+	0x39, 0xcc, 0xfe, 0xe5, 0x12, 0x5c, 0xee, 0xea, 0x58, 0x4d, 0xc5, 0xa1, 0x2d, 0x27, 0x26, 0x0f,
10493
-+	0x9c, 0xfd, 0x74, 0x18, 0xe4, 0x9b, 0xbc, 0x18, 0x4b, 0x38, 0xb3, 0xf7, 0xe6, 0x61, 0x0f, 0x53,
10494
-+	0xca, 0x41, 0x11, 0xed, 0x50, 0x40, 0x1f, 0x43, 0xde, 0xf8, 0x1b, 0x00, 0x51, 0xe4, 0x2d, 0xf9,
10495
-+	0x94, 0xbb, 0x6b, 0x0a, 0x43, 0xf2, 0x24, 0x3c, 0x66, 0xfd, 0x8e, 0x80, 0x60, 0x0d, 0x0b, 0x55,
10496
-+	0x61, 0xb2, 0x15, 0x06, 0x31, 0xd7, 0xb5, 0x56, 0xb9, 0x99, 0xcf, 0x80, 0xe9, 0x7b, 0x5a, 0x4b,
10497
-+	0xc1, 0x71, 0x47, 0x0d, 0xf4, 0x32, 0x8c, 0x08, 0x7f, 0xd4, 0x5a, 0x10, 0x78, 0x42, 0x0d, 0xa4,
10498
-+	0x8c, 0x46, 0xea, 0x09, 0x08, 0xeb, 0x78, 0x5a, 0x35, 0xa6, 0xc0, 0x1d, 0xca, 0xac, 0xc6, 0x95,
10499
-+	0xb8, 0x1a, 0x5e, 0x2a, 0x8c, 0xd4, 0x70, 0x5f, 0x61, 0xa4, 0x12, 0xc5, 0x58, 0xb9, 0xef, 0x37,
10500
-+	0x2b, 0xe8, 0xa9, 0x4a, 0xfa, 0x85, 0x12, 0x9c, 0x11, 0x0b, 0xe7, 0x71, 0x2f, 0x97, 0xc7, 0x94,
10501
-+	0xdd, 0xfe, 0x5b, 0x6b, 0xe6, 0xb4, 0xd7, 0xcc, 0x0f, 0x5b, 0x60, 0xb2, 0x57, 0xe8, 0xff, 0xcb,
10502
-+	0x8d, 0x23, 0xff, 0x72, 0x2e, 0xbb, 0xd6, 0x94, 0x17, 0xc8, 0x07, 0x8c, 0x28, 0x6f, 0xff, 0x47,
10503
-+	0x0b, 0x9e, 0xec, 0x49, 0x11, 0x2d, 0x41, 0x99, 0xf1, 0x80, 0x9a, 0x74, 0xf6, 0xb4, 0x32, 0x03,
10504
-+	0x94, 0x80, 0x1c, 0x96, 0x34, 0xa9, 0x89, 0x96, 0x3a, 0x02, 0xf6, 0x3f, 0x93, 0x11, 0xb0, 0xff,
10505
-+	0x9c, 0x31, 0x3c, 0x8f, 0x18, 0xb1, 0xff, 0x6b, 0x45, 0x18, 0xe4, 0x2b, 0xfe, 0x14, 0xc4, 0xb0,
10506
-+	0x65, 0xa1, 0xb7, 0xed, 0x12, 0xa7, 0x8a, 0xf7, 0x65, 0xb6, 0xea, 0xc4, 0x0e, 0x67, 0x13, 0xd4,
10507
-+	0x6d, 0x95, 0x68, 0x78, 0xd1, 0xac, 0x71, 0x9f, 0xcd, 0xa4, 0x14, 0x93, 0xc0, 0x69, 0x68, 0xb7,
10508
-+	0xdb, 0x97, 0x00, 0x22, 0x96, 0xc8, 0x9e, 0xd2, 0x10, 0x11, 0xcf, 0x3e, 0xd9, 0xa5, 0xf5, 0xba,
10509
-+	0x42, 0xe6, 0x7d, 0x48, 0x76, 0xba, 0x02, 0x60, 0x8d, 0xe2, 0xcc, 0x2b, 0x50, 0x56, 0xc8, 0xbd,
10510
-+	0xb4, 0x38, 0xa3, 0x3a, 0x73, 0xf1, 0x39, 0x98, 0x48, 0xb5, 0x75, 0x2c, 0x25, 0xd0, 0xaf, 0x58,
10511
-+	0x30, 0xc1, 0xbb, 0xbc, 0xe4, 0xef, 0x89, 0x33, 0xf5, 0x7d, 0x38, 0xeb, 0x65, 0x9c, 0x6d, 0x62,
10512
-+	0x46, 0xfb, 0x3f, 0x0b, 0x95, 0xd2, 0x27, 0x0b, 0x8a, 0x33, 0xdb, 0x40, 0xd7, 0xe9, 0xba, 0xa5,
10513
-+	0x67, 0x97, 0xe3, 0x09, 0xdf, 0xa1, 0x51, 0xbe, 0x66, 0x79, 0x19, 0x56, 0x50, 0xfb, 0x77, 0x2c,
10514
-+	0x98, 0xe2, 0x3d, 0xbf, 0x4d, 0xf6, 0xd5, 0x0e, 0xff, 0x30, 0xfb, 0x2e, 0x72, 0x68, 0x14, 0x72,
10515
-+	0x72, 0x68, 0xe8, 0x9f, 0x56, 0xec, 0xfa, 0x69, 0x3f, 0x6f, 0x81, 0x58, 0x81, 0xa7, 0x20, 0xca,
10516
-+	0x7f, 0xbb, 0x29, 0xca, 0xcf, 0xe4, 0x2f, 0xea, 0x1c, 0x19, 0xfe, 0x4f, 0x2d, 0x98, 0xe4, 0x08,
10517
-+	0xc9, 0x5b, 0xf2, 0x87, 0x3a, 0x0f, 0xfd, 0x24, 0xc3, 0x53, 0xd9, 0xaf, 0xb3, 0x3f, 0xca, 0x98,
10518
-+	0xac, 0x52, 0xd7, 0xc9, 0x6a, 0xca, 0x0d, 0x74, 0x8c, 0x24, 0x8f, 0xc7, 0x8e, 0x45, 0x6d, 0xff,
10519
-+	0x91, 0x05, 0x88, 0x37, 0x63, 0xb0, 0x3f, 0x94, 0xa9, 0x60, 0xa5, 0xda, 0x75, 0x91, 0x1c, 0x35,
10520
-+	0x0a, 0x82, 0x35, 0xac, 0x13, 0x19, 0x9e, 0x94, 0x41, 0x40, 0xb1, 0xb7, 0x41, 0xc0, 0x31, 0x46,
10521
-+	0xf4, 0x6b, 0x25, 0x48, 0x1b, 0xf3, 0xa3, 0xfb, 0x30, 0xda, 0x70, 0x5a, 0xce, 0x86, 0xeb, 0xb9,
10522
-+	0xb1, 0x4b, 0xa2, 0x6e, 0x96, 0x44, 0x8b, 0x1a, 0x9e, 0x78, 0xea, 0xd5, 0x4a, 0xb0, 0x41, 0x07,
10523
-+	0xcd, 0x02, 0xb4, 0x42, 0x77, 0xcf, 0xf5, 0xc8, 0x16, 0xd3, 0x38, 0x30, 0x6f, 0x45, 0x6e, 0x1e,
10524
-+	0x23, 0x4b, 0xb1, 0x86, 0x91, 0xe1, 0x78, 0x56, 0x7c, 0x7c, 0x8e, 0x67, 0xa5, 0x63, 0x3a, 0x9e,
10525
-+	0x0d, 0xf4, 0xe5, 0x78, 0x86, 0xe1, 0xbc, 0x64, 0x91, 0xe8, 0xff, 0x65, 0xd7, 0x23, 0x82, 0x2f,
10526
-+	0xe6, 0x3e, 0x8c, 0x33, 0x87, 0x07, 0x95, 0xf3, 0x38, 0x13, 0x03, 0xe7, 0xd4, 0x44, 0x9f, 0x87,
10527
-+	0x69, 0xc7, 0xf3, 0x82, 0x07, 0x6a, 0xd4, 0x96, 0xa2, 0x86, 0xe3, 0x71, 0x8d, 0xfd, 0x10, 0xa3,
10528
-+	0x7a, 0xe9, 0xf0, 0xa0, 0x32, 0x3d, 0x9f, 0x83, 0x83, 0x73, 0x6b, 0xa7, 0xfc, 0xd6, 0x86, 0x7b,
10529
-+	0xf9, 0xad, 0xd9, 0x3b, 0x70, 0xa6, 0x4e, 0x42, 0x97, 0xa5, 0xa0, 0x6c, 0x26, 0x5b, 0x72, 0x1d,
10530
-+	0xca, 0x61, 0xea, 0x10, 0xea, 0x2b, 0xb0, 0x91, 0x16, 0x66, 0x57, 0x1e, 0x3a, 0x09, 0x21, 0xfb,
10531
-+	0x4f, 0x2c, 0x18, 0x12, 0x0e, 0x05, 0xa7, 0xc0, 0xfb, 0xcc, 0x1b, 0x2a, 0xe8, 0x4a, 0xf6, 0x41,
10532
-+	0xcd, 0x3a, 0x93, 0xab, 0x7c, 0x5e, 0x49, 0x29, 0x9f, 0x9f, 0xec, 0x46, 0xa4, 0xbb, 0xda, 0xf9,
10533
-+	0x6f, 0x15, 0x61, 0xdc, 0x74, 0xa6, 0x38, 0x85, 0x21, 0x58, 0x83, 0xa1, 0x48, 0x78, 0xee, 0x14,
10534
-+	0xf2, 0x6d, 0x9f, 0xd3, 0x93, 0x98, 0x18, 0x36, 0x09, 0x5f, 0x1d, 0x49, 0x24, 0xd3, 0x25, 0xa8,
10535
-+	0xf8, 0x18, 0x5d, 0x82, 0x7a, 0xf9, 0xb3, 0x94, 0x4e, 0xc2, 0x9f, 0xc5, 0xfe, 0x3a, 0xbb, 0x2c,
10536
-+	0xf4, 0xf2, 0x53, 0xe0, 0x23, 0x6e, 0x9a, 0xd7, 0x8a, 0xdd, 0x65, 0x65, 0x89, 0x4e, 0xe5, 0xf0,
10537
-+	0x13, 0xbf, 0x64, 0xc1, 0xe5, 0x8c, 0xaf, 0xd2, 0x98, 0x8b, 0xe7, 0x60, 0xd8, 0x69, 0x37, 0x5d,
10538
-+	0xb5, 0x97, 0xb5, 0x87, 0xa8, 0x79, 0x51, 0x8e, 0x15, 0x06, 0x5a, 0x84, 0x29, 0xf2, 0xb0, 0xe5,
10539
-+	0xf2, 0x97, 0x40, 0xdd, 0xfa, 0xb0, 0xc8, 0x43, 0xc8, 0x2e, 0xa5, 0x81, 0xb8, 0x13, 0x5f, 0xb9,
10540
-+	0x43, 0x17, 0x73, 0xdd, 0xa1, 0xff, 0xa1, 0x05, 0x23, 0xa2, 0xdb, 0xa7, 0x30, 0xda, 0xdf, 0x61,
10541
-+	0x8e, 0xf6, 0x13, 0x5d, 0x46, 0x3b, 0x67, 0x98, 0xff, 0x4e, 0x41, 0xf5, 0xb7, 0x16, 0x84, 0x71,
10542
-+	0x1f, 0x4c, 0xcb, 0xab, 0x30, 0xdc, 0x0a, 0x83, 0x38, 0x68, 0x04, 0x9e, 0xe0, 0x59, 0x2e, 0x25,
10543
-+	0xde, 0xfa, 0xbc, 0xfc, 0x48, 0xfb, 0x8d, 0x15, 0x36, 0x1b, 0xbd, 0x20, 0x8c, 0x05, 0x9f, 0x90,
10544
-+	0x8c, 0x5e, 0x10, 0xc6, 0x98, 0x41, 0x50, 0x13, 0x20, 0x76, 0xc2, 0x2d, 0x12, 0xd3, 0x32, 0x11,
10545
-+	0xf8, 0x23, 0xff, 0xf0, 0x68, 0xc7, 0xae, 0x37, 0xeb, 0xfa, 0x71, 0x14, 0x87, 0xb3, 0x2b, 0x7e,
10546
-+	0x7c, 0x37, 0xe4, 0x22, 0x90, 0xe6, 0x7e, 0xaf, 0x68, 0x61, 0x8d, 0xae, 0xf4, 0x91, 0x64, 0x6d,
10547
-+	0x0c, 0x98, 0x4f, 0xda, 0x6b, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x15, 0x76, 0x95, 0xb0, 0x01, 0x3a,
10548
-+	0x9e, 0x67, 0xfc, 0x37, 0x86, 0xd5, 0xd0, 0xb2, 0xf7, 0xac, 0xaa, 0xee, 0x7f, 0xdf, 0xfd, 0xe4,
10549
-+	0xa6, 0x0d, 0xeb, 0x9e, 0x30, 0x89, 0x93, 0x3e, 0xfa, 0xce, 0x0e, 0x4b, 0x87, 0xe7, 0x7b, 0x5c,
10550
-+	0x01, 0xc7, 0xb0, 0x6d, 0x60, 0x61, 0xad, 0x59, 0xf8, 0xdf, 0x95, 0x9a, 0x58, 0xe4, 0x5a, 0x58,
10551
-+	0x6b, 0x01, 0xc0, 0x09, 0x0e, 0x9a, 0x13, 0x02, 0x74, 0xc9, 0xc8, 0x3e, 0x27, 0x05, 0x68, 0xf9,
10552
-+	0xf9, 0x9a, 0x04, 0xfd, 0x02, 0x8c, 0xa8, 0x2c, 0x74, 0x35, 0x9e, 0xcc, 0x4b, 0x84, 0x41, 0x59,
10553
-+	0x4a, 0x8a, 0xb1, 0x8e, 0x83, 0xd6, 0x61, 0x22, 0xe2, 0xda, 0x13, 0x15, 0xed, 0x8e, 0x6b, 0xa1,
10554
-+	0x3e, 0x29, 0x2d, 0x24, 0xea, 0x26, 0xf8, 0x88, 0x15, 0xf1, 0xa3, 0x43, 0x3a, 0x3a, 0xa6, 0x49,
10555
-+	0xa0, 0xd7, 0x61, 0xdc, 0xd3, 0x73, 0xb9, 0xd7, 0x84, 0x92, 0x4a, 0x19, 0x10, 0x1b, 0x99, 0xde,
10556
-+	0x6b, 0x38, 0x85, 0x4d, 0x79, 0x1d, 0xbd, 0x44, 0x44, 0x68, 0x74, 0xfc, 0x2d, 0x12, 0x89, 0x1c,
10557
-+	0x5a, 0x8c, 0xd7, 0xb9, 0x93, 0x83, 0x83, 0x73, 0x6b, 0xa3, 0x57, 0x61, 0x54, 0x7e, 0xbe, 0xe6,
10558
-+	0xc6, 0x9b, 0x98, 0xa9, 0x6b, 0x30, 0x6c, 0x60, 0xa2, 0x07, 0x70, 0x4e, 0xfe, 0x5f, 0x0f, 0x9d,
10559
-+	0xcd, 0x4d, 0xb7, 0x21, 0xbc, 0xa8, 0xb9, 0xaf, 0xce, 0xbc, 0x74, 0xfe, 0x59, 0xca, 0x42, 0x3a,
10560
-+	0x3a, 0xa8, 0x5c, 0x15, 0xa3, 0x96, 0x09, 0x67, 0x93, 0x98, 0x4d, 0x1f, 0xad, 0xc2, 0x99, 0x6d,
10561
-+	0xe2, 0x78, 0xf1, 0xf6, 0xe2, 0x36, 0x69, 0xec, 0xc8, 0x4d, 0xc4, 0x9c, 0x83, 0x35, 0xe3, 0xee,
10562
-+	0x5b, 0x9d, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x07, 0xa6, 0x5b, 0xed, 0x0d, 0xcf, 0x8d, 0xb6, 0xd7,
10563
-+	0x82, 0x98, 0x19, 0x65, 0xa8, 0x24, 0x6e, 0xc2, 0x8b, 0x58, 0x39, 0x46, 0xd7, 0x72, 0xf0, 0x70,
10564
-+	0x2e, 0x05, 0xf4, 0x3e, 0x9c, 0x4b, 0x2d, 0x06, 0xe1, 0xd3, 0x38, 0x9e, 0x1f, 0xb6, 0xb4, 0x9e,
10565
-+	0x55, 0x41, 0xf8, 0x28, 0x66, 0x81, 0x70, 0x76, 0x13, 0x1f, 0xcc, 0x54, 0xe7, 0x3d, 0x5a, 0x59,
10566
-+	0x63, 0xca, 0xd0, 0x97, 0x61, 0x54, 0x5f, 0x45, 0xe2, 0x82, 0xb9, 0x96, 0xcd, 0xb3, 0x68, 0xab,
10567
-+	0x8d, 0xb3, 0x74, 0x6a, 0x45, 0xe9, 0x30, 0x6c, 0x50, 0xb4, 0x09, 0x64, 0x7f, 0x1f, 0xba, 0x03,
10568
-+	0xc3, 0x0d, 0xcf, 0x25, 0x7e, 0xbc, 0x52, 0xeb, 0x16, 0x74, 0x63, 0x51, 0xe0, 0x88, 0x01, 0x13,
10569
-+	0x01, 0x42, 0x79, 0x19, 0x56, 0x14, 0xec, 0xdf, 0x28, 0x40, 0xa5, 0x47, 0x14, 0xdb, 0x94, 0x46,
10570
-+	0xd9, 0xea, 0x4b, 0xa3, 0x3c, 0x2f, 0x53, 0xd2, 0xad, 0xa5, 0xc4, 0xec, 0x54, 0xba, 0xb9, 0x44,
10571
-+	0xd8, 0x4e, 0xe3, 0xf7, 0x6d, 0xe1, 0xab, 0x2b, 0xa5, 0x4b, 0x3d, 0x6d, 0xcf, 0x8d, 0xc7, 0xa8,
10572
-+	0x81, 0xfe, 0x05, 0x91, 0xdc, 0x87, 0x05, 0xfb, 0xeb, 0x05, 0x38, 0xa7, 0x86, 0xf0, 0x2f, 0xee,
10573
-+	0xc0, 0xdd, 0xeb, 0x1c, 0xb8, 0x13, 0x78, 0x96, 0xb1, 0xef, 0xc2, 0x20, 0x0f, 0x5a, 0xd2, 0x07,
10574
-+	0x03, 0xf4, 0x94, 0x19, 0xe1, 0x4a, 0x5d, 0xd3, 0x46, 0x94, 0xab, 0xbf, 0x62, 0xc1, 0xc4, 0xfa,
10575
-+	0x62, 0xad, 0x1e, 0x34, 0x76, 0x48, 0x3c, 0xcf, 0x19, 0x56, 0x2c, 0xf8, 0x1f, 0xeb, 0x11, 0xf9,
10576
-+	0x9a, 0x2c, 0x8e, 0xe9, 0x2a, 0x94, 0xb6, 0x83, 0x28, 0x4e, 0xbf, 0xd9, 0xde, 0x0a, 0xa2, 0x18,
10577
-+	0x33, 0x88, 0xfd, 0xbb, 0x16, 0x0c, 0xb0, 0x44, 0xaa, 0xbd, 0xb2, 0xfb, 0xf6, 0xf3, 0x5d, 0xe8,
10578
-+	0x65, 0x18, 0x24, 0x9b, 0x9b, 0xa4, 0x11, 0x8b, 0x59, 0x95, 0x0e, 0xa5, 0x83, 0x4b, 0xac, 0x94,
10579
-+	0x5e, 0xfa, 0xac, 0x31, 0xfe, 0x17, 0x0b, 0x64, 0xf4, 0x16, 0x94, 0x63, 0x77, 0x97, 0xcc, 0x37,
10580
-+	0x9b, 0xe2, 0xd5, 0xeb, 0x11, 0xfc, 0x77, 0xd7, 0x25, 0x01, 0x9c, 0xd0, 0xb2, 0xbf, 0x5a, 0x00,
10581
-+	0x48, 0x5c, 0xef, 0x7b, 0x7d, 0xe2, 0x42, 0xc7, 0x7b, 0xc8, 0xb5, 0x8c, 0xf7, 0x10, 0x94, 0x10,
10582
-+	0xcc, 0x78, 0x0c, 0x51, 0xc3, 0x54, 0xec, 0x6b, 0x98, 0x4a, 0xc7, 0x19, 0xa6, 0x45, 0x98, 0x4a,
10583
-+	0x42, 0x07, 0x98, 0x71, 0x54, 0x98, 0x90, 0xb2, 0x9e, 0x06, 0xe2, 0x4e, 0x7c, 0x9b, 0xc0, 0x55,
10584
-+	0x19, 0xd1, 0x52, 0xde, 0x35, 0xcc, 0xa8, 0xf2, 0x18, 0x89, 0x9e, 0x93, 0x07, 0x9f, 0x42, 0xee,
10585
-+	0x83, 0xcf, 0x4f, 0x59, 0x70, 0x36, 0xdd, 0x0e, 0xf3, 0x5e, 0xfb, 0x01, 0x0b, 0xce, 0xb1, 0x67,
10586
-+	0x2f, 0xd6, 0x6a, 0xe7, 0x23, 0xdb, 0x4b, 0xd9, 0x21, 0x15, 0xba, 0xf7, 0x38, 0xf1, 0x5c, 0x5e,
10587
-+	0xcd, 0x22, 0x8d, 0xb3, 0x5b, 0xb4, 0xbf, 0xdf, 0x02, 0xe1, 0x24, 0xd4, 0xc7, 0xc6, 0x7e, 0x5b,
10588
-+	0xa6, 0x42, 0x35, 0x02, 0x78, 0x5f, 0xcd, 0xf7, 0x9a, 0x12, 0x61, 0xbb, 0xd5, 0x45, 0x6a, 0x04,
10589
-+	0xeb, 0x36, 0x68, 0xd9, 0x4d, 0x10, 0xd0, 0x2a, 0x61, 0x7a, 0xa2, 0xde, 0xbd, 0xb9, 0x01, 0xd0,
10590
-+	0x64, 0xb8, 0x5a, 0x42, 0x44, 0x75, 0x6c, 0x57, 0x15, 0x04, 0x6b, 0x58, 0xf6, 0x8f, 0x14, 0x60,
10591
-+	0x44, 0x06, 0x8c, 0x6e, 0xfb, 0xfd, 0x48, 0x73, 0xc7, 0xca, 0x4b, 0xc3, 0x32, 0x88, 0x52, 0xc2,
10592
-+	0xb5, 0x44, 0x08, 0x4e, 0x32, 0x88, 0x4a, 0x00, 0x4e, 0x70, 0xd0, 0x33, 0x30, 0x14, 0xb5, 0x37,
10593
-+	0x18, 0x7a, 0xca, 0xf5, 0xa5, 0xce, 0x8b, 0xb1, 0x84, 0xa3, 0xcf, 0xc3, 0x24, 0xaf, 0x17, 0x06,
10594
-+	0x2d, 0x67, 0x8b, 0x2b, 0x0d, 0x07, 0x94, 0x2f, 0xea, 0xe4, 0x6a, 0x0a, 0x76, 0x74, 0x50, 0x39,
10595
-+	0x9b, 0x2e, 0x63, 0xea, 0xe6, 0x0e, 0x2a, 0xf6, 0x97, 0x01, 0x75, 0xc6, 0xc0, 0x46, 0x6f, 0x70,
10596
-+	0x03, 0x24, 0x37, 0x24, 0xcd, 0x6e, 0x7a, 0x64, 0xdd, 0x75, 0x52, 0x9a, 0x9f, 0xf3, 0x5a, 0x58,
10597
-+	0xd5, 0xb7, 0xff, 0x5a, 0x11, 0x26, 0xd3, 0x8e, 0x74, 0xe8, 0x16, 0x0c, 0xf2, 0x0b, 0x46, 0x90,
10598
-+	0xef, 0xf2, 0x4c, 0xa9, 0xb9, 0xdf, 0xb1, 0xad, 0x26, 0xee, 0x28, 0x51, 0x1f, 0xbd, 0x03, 0x23,
10599
-+	0xcd, 0xe0, 0x81, 0xff, 0xc0, 0x09, 0x9b, 0xf3, 0xb5, 0x15, 0xb1, 0x2e, 0x33, 0xf9, 0xd4, 0x6a,
10600
-+	0x82, 0xa6, 0xbb, 0xf4, 0x31, 0x95, 0x7c, 0x02, 0xc2, 0x3a, 0x39, 0xb4, 0xce, 0xe2, 0xfa, 0x6d,
10601
-+	0xba, 0x5b, 0xab, 0x4e, 0xab, 0x9b, 0x35, 0xea, 0xa2, 0x44, 0xd2, 0x28, 0x8f, 0x89, 0xe0, 0x7f,
10602
-+	0x1c, 0x80, 0x13, 0x42, 0xe8, 0xbb, 0xe1, 0x4c, 0x94, 0xa3, 0xda, 0xca, 0x4b, 0xb5, 0xd0, 0x4d,
10603
-+	0xdb, 0xb3, 0x70, 0x81, 0x4a, 0x10, 0x59, 0x4a, 0xb0, 0xac, 0x66, 0xec, 0xc3, 0x33, 0x60, 0xec,
10604
-+	0x46, 0x23, 0xef, 0x8e, 0x75, 0x42, 0x79, 0x77, 0x30, 0x0c, 0x93, 0xdd, 0x56, 0xbc, 0x5f, 0x75,
10605
-+	0xc3, 0x6e, 0x89, 0xdb, 0x96, 0x04, 0x4e, 0x27, 0x4d, 0x09, 0xc1, 0x8a, 0x4e, 0x76, 0x72, 0xa4,
10606
-+	0xe2, 0x87, 0x98, 0x1c, 0xa9, 0x74, 0x8a, 0xc9, 0x91, 0xd6, 0x60, 0x68, 0xcb, 0x8d, 0x31, 0x69,
10607
-+	0x05, 0x82, 0xb5, 0xcb, 0x5c, 0x87, 0x37, 0x39, 0x4a, 0x67, 0x22, 0x0e, 0x01, 0xc0, 0x92, 0x08,
10608
-+	0x7a, 0x43, 0xed, 0xc0, 0xc1, 0x7c, 0xc9, 0xa8, 0xf3, 0x3d, 0x2d, 0x73, 0x0f, 0x8a, 0x64, 0x48,
10609
-+	0x43, 0x8f, 0x9a, 0x0c, 0x69, 0x59, 0xa6, 0x30, 0x1a, 0xce, 0x37, 0x1d, 0x67, 0x19, 0x8a, 0x7a,
10610
-+	0x24, 0x2e, 0x32, 0x92, 0x3d, 0x95, 0x4f, 0x2e, 0xd9, 0xd3, 0xf7, 0x5b, 0x70, 0xae, 0x95, 0x95,
10611
-+	0xf7, 0x4c, 0x24, 0x1e, 0x7a, 0xb9, 0xef, 0xc4, 0x6e, 0x46, 0x83, 0x4c, 0x44, 0xce, 0x44, 0xc3,
10612
-+	0xd9, 0xcd, 0xd1, 0x81, 0x0e, 0x37, 0x9a, 0x22, 0x5b, 0xd1, 0x53, 0x39, 0x59, 0xa3, 0xba, 0xe4,
10613
-+	0x8a, 0x5a, 0xcf, 0xc8, 0x50, 0xf4, 0xf1, 0xbc, 0x0c, 0x45, 0x7d, 0xe7, 0x25, 0x7a, 0x43, 0xe5,
10614
-+	0x8b, 0x1a, 0xcb, 0x5f, 0x4a, 0x3c, 0x1b, 0x54, 0xcf, 0x2c, 0x51, 0x6f, 0xa8, 0x2c, 0x51, 0x5d,
10615
-+	0xe2, 0x9b, 0xf1, 0x1c, 0x50, 0x3d, 0x73, 0x43, 0x69, 0xf9, 0x9d, 0x26, 0x4e, 0x26, 0xbf, 0x93,
10616
-+	0x71, 0xd5, 0x74, 0x49, 0x30, 0xa4, 0xdd, 0x27, 0x9d, 0x09, 0x86, 0x72, 0x2f, 0x1b, 0x9e, 0xcb,
10617
-+	0x6a, 0xea, 0x91, 0x72, 0x59, 0xdd, 0xd7, 0x73, 0x43, 0xa1, 0x1e, 0x39, 0x66, 0x28, 0x52, 0x9f,
10618
-+	0x19, 0xa1, 0xee, 0xeb, 0x17, 0xe0, 0x99, 0x7c, 0xba, 0xea, 0x9e, 0xeb, 0xa4, 0x9b, 0x79, 0x05,
10619
-+	0x76, 0x64, 0x9a, 0x3a, 0x7b, 0x3a, 0x99, 0xa6, 0xce, 0x3d, 0x86, 0x4c, 0x53, 0xe7, 0x4f, 0x2d,
10620
-+	0xd3, 0xd4, 0x85, 0x0f, 0x35, 0xd3, 0xd4, 0xf4, 0x63, 0xc8, 0x34, 0xb5, 0x96, 0x64, 0x9a, 0xba,
10621
-+	0x98, 0x3f, 0x35, 0x19, 0x76, 0xad, 0x39, 0xf9, 0xa5, 0xee, 0x43, 0xb9, 0x25, 0x23, 0x3e, 0x88,
10622
-+	0x40, 0x6c, 0xd9, 0x49, 0x6f, 0xb3, 0xc2, 0x42, 0xf0, 0xf5, 0xaa, 0x40, 0x38, 0x21, 0x45, 0xe9,
10623
-+	0x26, 0xf9, 0xa6, 0x9e, 0xe8, 0xa2, 0x0c, 0xcd, 0x52, 0x33, 0x75, 0xc9, 0x32, 0x65, 0xe4, 0x86,
10624
-+	0xba, 0x74, 0x72, 0xb9, 0xa1, 0xfe, 0x6a, 0x01, 0xae, 0x74, 0xdf, 0x37, 0x89, 0xee, 0xab, 0x96,
10625
-+	0xbc, 0xd5, 0xa4, 0x74, 0x5f, 0x5c, 0x88, 0x4a, 0xb0, 0xfa, 0x0e, 0xb7, 0x73, 0x13, 0xa6, 0x94,
10626
-+	0xa1, 0xac, 0xe7, 0x36, 0xf6, 0xb5, 0x24, 0xbb, 0xca, 0x21, 0xb0, 0x9e, 0x46, 0xc0, 0x9d, 0x75,
10627
-+	0xd0, 0x3c, 0x4c, 0x18, 0x85, 0x2b, 0x55, 0x21, 0x2c, 0x29, 0x65, 0x5b, 0xdd, 0x04, 0xe3, 0x34,
10628
-+	0xbe, 0xfd, 0x73, 0x16, 0x5c, 0xc8, 0x49, 0xc2, 0xd0, 0x77, 0x34, 0x99, 0x4d, 0x98, 0x68, 0x99,
10629
-+	0x55, 0x7b, 0x04, 0x9d, 0x32, 0x52, 0x3d, 0xa8, 0xbe, 0xa6, 0x00, 0x38, 0x4d, 0x74, 0xe1, 0xfa,
10630
-+	0x6f, 0xfd, 0xfe, 0x95, 0x8f, 0xfd, 0xf6, 0xef, 0x5f, 0xf9, 0xd8, 0xef, 0xfc, 0xfe, 0x95, 0x8f,
10631
-+	0xfd, 0xff, 0x87, 0x57, 0xac, 0xdf, 0x3a, 0xbc, 0x62, 0xfd, 0xf6, 0xe1, 0x15, 0xeb, 0x77, 0x0e,
10632
-+	0xaf, 0x58, 0xbf, 0x77, 0x78, 0xc5, 0xfa, 0xea, 0x1f, 0x5c, 0xf9, 0xd8, 0xdb, 0x85, 0xbd, 0x17,
10633
-+	0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x60, 0x08, 0xf7, 0x9c, 0xf8, 0xe6, 0x00, 0x00,
10634
- }
10635
-diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go
10636
-index d9f4869..5417d75 100644
10637
-+++ b/staging/src/k8s.io/api/core/v1/types.go
10638
-@@ -133,9 +133,9 @@ type VolumeSource struct {
10639
- 	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
10640
- 	// +optional
10641
- 	Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,21,opt,name=quobyte"`
10642
--	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
10643
-+	// CascadeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine
10644
- 	// +optional
10645
--	AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,22,opt,name=azureDisk"`
10646
-+	CascadeDisk *CascadeDiskVolumeSource `json:"vkeDisk,omitempty" protobuf:"bytes,22,opt,name=cascadeDisk"`
10647
- 	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
10648
- 	PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,23,opt,name=photonPersistentDisk"`
10649
- 	// Items for all in one resources secrets, configmaps, and downward API
10650
-@@ -149,6 +149,9 @@ type VolumeSource struct {
10651
- 	// StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
10652
- 	// +optional
10653
- 	StorageOS *StorageOSVolumeSource `json:"storageos,omitempty" protobuf:"bytes,27,opt,name=storageos"`
10654
-+	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
10655
-+	// +optional
10656
-+	AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,28,opt,name=azureDisk"`
10657
- }
10658
- 
10659
- // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
10660
-@@ -228,9 +231,9 @@ type PersistentVolumeSource struct {
10661
- 	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
10662
- 	// +optional
10663
- 	Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,15,opt,name=quobyte"`
10664
--	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
10665
-+	// CascadeDisk represents a Cascade persistent disk attached and mounted on kubelets host machine
10666
- 	// +optional
10667
--	AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,16,opt,name=azureDisk"`
10668
-+	CascadeDisk *CascadeDiskVolumeSource `json:"vkeDisk,omitempty" protobuf:"bytes,16,opt,name=cascadeDisk"`
10669
- 	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
10670
- 	PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,17,opt,name=photonPersistentDisk"`
10671
- 	// PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
10672
-@@ -249,6 +252,9 @@ type PersistentVolumeSource struct {
10673
- 	// CSI represents storage that handled by an external CSI driver (Beta feature).
10674
- 	// +optional
10675
- 	CSI *CSIPersistentVolumeSource `json:"csi,omitempty" protobuf:"bytes,22,opt,name=csi"`
10676
-+	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
10677
-+	// +optional
10678
-+	AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,23,opt,name=azureDisk"`
10679
- }
10680
- 
10681
- const (
10682
-@@ -1446,6 +1452,16 @@ type StorageOSPersistentVolumeSource struct {
10683
- 	SecretRef *ObjectReference `json:"secretRef,omitempty" protobuf:"bytes,5,opt,name=secretRef"`
10684
- }
10685
- 
10686
-+// Represents a Photon Controller persistent disk resource.
10687
-+type CascadeDiskVolumeSource struct {
10688
-+	// ID that identifies Cascade persistent disk
10689
-+	DiskID string `json:"diskID" protobuf:"bytes,1,opt,name=diskID"`
10690
-+	// Filesystem type to mount.
10691
-+	// Must be a filesystem type supported by the host operating system.
10692
-+	// Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.
10693
-+	FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"`
10694
-+}
10695
-+
10696
- // Adapts a ConfigMap into a volume.
10697
- //
10698
- // The contents of the target ConfigMap's Data field will be presented in a
10699
-2.7.4
10700
-
10701 1
deleted file mode 100644
... ...
@@ -1,239 +0,0 @@
1
-%ifarch x86_64
2
-%define archname amd64
3
-%endif
4
-%ifarch aarch64
5
-%define archname arm64
6
-%endif
7
-
8
-Summary:        Kubernetes cluster management
9
-Name:           kubernetes
10
-Version:        1.11.3
11
-Release:        3%{?dist}
12
-License:        ASL 2.0
13
-URL:            https://github.com/kubernetes/kubernetes/archive/v%{version}.tar.gz
14
-Source0:        kubernetes-%{version}.tar.gz
15
-%define sha1    kubernetes-%{version}.tar.gz=60914656f6204ad95555b767181648eeef899dc0
16
-Source1:        https://github.com/kubernetes/contrib/archive/contrib-0.7.0.tar.gz
17
-%define sha1    contrib-0.7.0=47a744da3b396f07114e518226b6313ef4b2203c
18
-Patch0:         k8s-1.11-vke.patch
19
-Patch1:         go-27704.patch
20
-Patch2:         go-27842.patch
21
-Group:          Development/Tools
22
-Vendor:         VMware, Inc.
23
-Distribution:   Photon
24
-BuildRequires:  go >= 1.10
25
-BuildRequires:  rsync
26
-BuildRequires:  which
27
-Requires:       cni
28
-Requires:       ebtables
29
-Requires:       etcd >= 3.0.4
30
-Requires:       ethtool
31
-Requires:       iptables
32
-Requires:       iproute2
33
-Requires(pre):  /usr/sbin/useradd /usr/sbin/groupadd
34
-Requires(postun):/usr/sbin/userdel /usr/sbin/groupdel
35
-Requires:       socat
36
-Requires:       (util-linux or toybox)
37
-Requires:       cri-tools
38
-
39
-%description
40
-Kubernetes is an open source implementation of container cluster management.
41
-
42
-%package        kubeadm
43
-Summary:        kubeadm deployment tool
44
-Group:          Development/Tools
45
-Requires:       %{name} = %{version}
46
-%description    kubeadm
47
-kubeadm is a tool that enables quick and easy deployment of a kubernetes cluster.
48
-
49
-%package	kubectl-extras
50
-Summary:	kubectl binaries for extra platforms
51
-Group:		Development/Tools
52
-%description	kubectl-extras
53
-Contains kubectl binaries for additional platforms.
54
-
55
-%package        pause
56
-Summary:        pause binary
57
-Group:          Development/Tools
58
-%description    pause
59
-A pod setup process that holds a pod's namespace.
60
-
61
-%prep -p exit
62
-%setup -qn %{name}-%{version}
63
-cd ..
64
-tar xf %{SOURCE1} --no-same-owner
65
-sed -i -e 's|127.0.0.1:4001|127.0.0.1:2379|g' contrib-0.7.0/init/systemd/environ/apiserver
66
-cd %{name}-%{version}
67
-%patch0 -p1
68
-
69
-pushd vendor/golang.org/x/net
70
-%patch1 -p1
71
-%patch2 -p1
72
-popd
73
-
74
-%build
75
-make
76
-pushd build/pause
77
-mkdir -p bin
78
-gcc -Os -Wall -Werror -static -o bin/pause-%{archname} pause.c
79
-strip bin/pause-%{archname}
80
-popd
81
-
82
-%ifarch x86_64
83
-make WHAT="cmd/kubectl" KUBE_BUILD_PLATFORMS="darwin/%{archname} windows/%{archname}"
84
-%endif
85
-
86
-%install
87
-install -vdm644 %{buildroot}/etc/profile.d
88
-install -m 755 -d %{buildroot}%{_bindir}
89
-install -m 755 -d %{buildroot}/opt/vmware/kubernetes
90
-install -m 755 -d %{buildroot}/opt/vmware/kubernetes/linux/%{archname}
91
-%ifarch x86_64
92
-install -m 755 -d %{buildroot}/opt/vmware/kubernetes/darwin/%{archname}
93
-install -m 755 -d %{buildroot}/opt/vmware/kubernetes/windows/%{archname}
94
-%endif
95
-
96
-binaries=(cloud-controller-manager hyperkube kube-aggregator kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler kubectl)
97
-for bin in "${binaries[@]}"; do
98
-  echo "+++ INSTALLING ${bin}"
99
-  install -p -m 755 -t %{buildroot}%{_bindir} _output/local/bin/linux/%{archname}/${bin}
100
-done
101
-install -p -m 755 -t %{buildroot}%{_bindir} build/pause/bin/pause-%{archname}
102
-
103
-# kubectl-extras
104
-install -p -m 755 -t %{buildroot}/opt/vmware/kubernetes/linux/%{archname}/ _output/local/bin/linux/%{archname}/kubectl
105
-%ifarch x86_64
106
-install -p -m 755 -t %{buildroot}/opt/vmware/kubernetes/darwin/%{archname}/ _output/local/bin/darwin/%{archname}/kubectl
107
-install -p -m 755 -t %{buildroot}/opt/vmware/kubernetes/windows/%{archname}/ _output/local/bin/windows/%{archname}/kubectl.exe
108
-%endif
109
-
110
-# kubeadm install
111
-install -vdm644 %{buildroot}/etc/systemd/system/kubelet.service.d
112
-install -p -m 755 -t %{buildroot}%{_bindir} _output/local/bin/linux/%{archname}/kubeadm
113
-install -p -m 755 -t %{buildroot}/etc/systemd/system build/rpms/kubelet.service
114
-install -p -m 755 -t %{buildroot}/etc/systemd/system/kubelet.service.d build/rpms/10-kubeadm.conf
115
-sed -i '/KUBELET_CGROUP_ARGS=--cgroup-driver=systemd/d' %{buildroot}/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
116
-
117
-cd ..
118
-# install config files
119
-install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}
120
-install -m 644 -t %{buildroot}%{_sysconfdir}/%{name} contrib-0.7.0/init/systemd/environ/*
121
-cat << EOF >> %{buildroot}%{_sysconfdir}/%{name}/kubeconfig
122
-apiVersion: v1
123
-clusters:
124
-- cluster:
125
-    server: http://127.0.0.1:8080
126
-EOF
127
-sed -i '/KUBELET_API_SERVER/c\KUBELET_API_SERVER="--kubeconfig=/etc/kubernetes/kubeconfig"' %{buildroot}%{_sysconfdir}/%{name}/kubelet
128
-
129
-# install service files
130
-install -d -m 0755 %{buildroot}/usr/lib/systemd/system
131
-install -m 0644 -t %{buildroot}/usr/lib/systemd/system contrib-0.7.0/init/systemd/*.service
132
-
133
-# install the place the kubelet defaults to put volumes
134
-install -dm755 %{buildroot}/var/lib/kubelet
135
-install -dm755 %{buildroot}/var/run/kubernetes
136
-
137
-mkdir -p %{buildroot}/%{_lib}/tmpfiles.d
138
-cat << EOF >> %{buildroot}/%{_lib}/tmpfiles.d/kubernetes.conf
139
-d /var/run/kubernetes 0755 kube kube -
140
-EOF
141
-
142
-%check
143
-export GOPATH=%{_builddir}
144
-go get golang.org/x/tools/cmd/cover
145
-make %{?_smp_mflags} check
146
-
147
-%clean
148
-rm -rf %{buildroot}/*
149
-
150
-%pre
151
-if [ $1 -eq 1 ]; then
152
-    # Initial installation.
153
-    getent group kube >/dev/null || groupadd -r kube
154
-    getent passwd kube >/dev/null || useradd -r -g kube -d / -s /sbin/nologin \
155
-            -c "Kubernetes user" kube
156
-fi
157
-
158
-%post
159
-chown -R kube:kube /var/lib/kubelet
160
-chown -R kube:kube /var/run/kubernetes
161
-systemctl daemon-reload
162
-
163
-%post kubeadm
164
-systemctl daemon-reload
165
-systemctl stop kubelet
166
-systemctl enable kubelet
167
-
168
-%preun kubeadm
169
-if [ $1 -eq 0 ]; then
170
-    systemctl stop kubelet
171
-fi
172
-
173
-%postun
174
-if [ $1 -eq 0 ]; then
175
-    # Package deletion
176
-    userdel kube
177
-    groupdel kube
178
-    systemctl daemon-reload
179
-fi
180
-
181
-%postun kubeadm
182
-if [ $1 -eq 0 ]; then
183
-    systemctl daemon-reload
184
-fi
185
-
186
-%files
187
-%defattr(-,root,root)
188
-%{_bindir}/cloud-controller-manager
189
-%{_bindir}/hyperkube
190
-%{_bindir}/kube-aggregator
191
-%{_bindir}/kube-apiserver
192
-%{_bindir}/kube-controller-manager
193
-%{_bindir}/kubelet
194
-%{_bindir}/kube-proxy
195
-%{_bindir}/kube-scheduler
196
-%{_bindir}/kubectl
197
-#%{_bindir}/kubefed
198
-%{_lib}/systemd/system/kube-apiserver.service
199
-%{_lib}/systemd/system/kubelet.service
200
-%{_lib}/systemd/system/kube-scheduler.service
201
-%{_lib}/systemd/system/kube-controller-manager.service
202
-%{_lib}/systemd/system/kube-proxy.service
203
-%{_lib}/tmpfiles.d/kubernetes.conf
204
-%dir %{_sysconfdir}/%{name}
205
-%dir /var/lib/kubelet
206
-%dir /var/run/kubernetes
207
-%config(noreplace) %{_sysconfdir}/%{name}/config
208
-%config(noreplace) %{_sysconfdir}/%{name}/apiserver
209
-%config(noreplace) %{_sysconfdir}/%{name}/controller-manager
210
-%config(noreplace) %{_sysconfdir}/%{name}/proxy
211
-%config(noreplace) %{_sysconfdir}/%{name}/kubelet
212
-%config(noreplace) %{_sysconfdir}/%{name}/kubeconfig
213
-%config(noreplace) %{_sysconfdir}/%{name}/scheduler
214
-
215
-%files kubeadm
216
-%defattr(-,root,root)
217
-%{_bindir}/kubeadm
218
-/etc/systemd/system/kubelet.service
219
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
220
-
221
-%files pause
222
-%defattr(-,root,root)
223
-%{_bindir}/pause-%{archname}
224
-
225
-%files kubectl-extras
226
-%defattr(-,root,root)
227
-/opt/vmware/kubernetes/linux/%{archname}/kubectl
228
-%ifarch x86_64
229
-/opt/vmware/kubernetes/darwin/%{archname}/kubectl
230
-/opt/vmware/kubernetes/windows/%{archname}/kubectl.exe
231
-%endif
232
-
233
-%changelog
234
-*   Mon Jan 28 2019 Bo Gan <ganb@vmware.com> 1.11.3-3
235
--   Fix CVE-2018-17846 and CVE-2018-17143
236
-*   Fri Oct 26 2018 Ajay Kaher <akaher@vmware.com> 1.11.3-2
237
--   Fix for aarch64
238
-*   Tue Oct 23 2018 Michelle Wang <michellew@vmware.com> 1.11.3-1
239
--   Add k8s version 1.11.3 with vke patch (350444)
240 1
new file mode 100644
... ...
@@ -0,0 +1,236 @@
0
+%ifarch x86_64
1
+%define archname amd64
2
+%endif
3
+%ifarch aarch64
4
+%define archname arm64
5
+%endif
6
+
7
+Summary:        Kubernetes cluster management
8
+Name:           kubernetes
9
+Version:        1.12.7
10
+Release:        1%{?dist}
11
+License:        ASL 2.0
12
+URL:            https://github.com/kubernetes/kubernetes/archive/v%{version}.tar.gz
13
+Source0:        kubernetes-%{version}.tar.gz
14
+%define sha1    kubernetes-%{version}.tar.gz=62cbd12425af750b4134acdfa713a760b2d27438
15
+Source1:        https://github.com/kubernetes/contrib/archive/contrib-0.7.0.tar.gz
16
+%define sha1    contrib-0.7.0=47a744da3b396f07114e518226b6313ef4b2203c
17
+Patch0:         go-27704.patch
18
+Patch1:         go-27842.patch
19
+Group:          Development/Tools
20
+Vendor:         VMware, Inc.
21
+Distribution:   Photon
22
+BuildRequires:  go >= 1.10.2
23
+BuildRequires:  rsync
24
+BuildRequires:  which
25
+Requires:       cni
26
+Requires:       ebtables
27
+Requires:       etcd >= 3.0.4
28
+Requires:       ethtool
29
+Requires:       iptables
30
+Requires:       iproute2
31
+Requires(pre):  /usr/sbin/useradd /usr/sbin/groupadd
32
+Requires(postun):/usr/sbin/userdel /usr/sbin/groupdel
33
+Requires:       socat
34
+Requires:       (util-linux or toybox)
35
+Requires:       cri-tools
36
+
37
+%description
38
+Kubernetes is an open source implementation of container cluster management.
39
+
40
+%package        kubeadm
41
+Summary:        kubeadm deployment tool
42
+Group:          Development/Tools
43
+Requires:       %{name} = %{version}
44
+%description    kubeadm
45
+kubeadm is a tool that enables quick and easy deployment of a kubernetes cluster.
46
+
47
+%package	kubectl-extras
48
+Summary:	kubectl binaries for extra platforms
49
+Group:		Development/Tools
50
+%description	kubectl-extras
51
+Contains kubectl binaries for additional platforms.
52
+
53
+%package        pause
54
+Summary:        pause binary
55
+Group:          Development/Tools
56
+%description    pause
57
+A pod setup process that holds a pod's namespace.
58
+
59
+%prep -p exit
60
+%setup -qn %{name}-%{version}
61
+cd ..
62
+tar xf %{SOURCE1} --no-same-owner
63
+sed -i -e 's|127.0.0.1:4001|127.0.0.1:2379|g' contrib-0.7.0/init/systemd/environ/apiserver
64
+cd %{name}-%{version}
65
+
66
+pushd vendor/golang.org/x/net
67
+%patch0 -p1
68
+%patch1 -p1
69
+popd
70
+
71
+%build
72
+make
73
+pushd build/pause
74
+mkdir -p bin
75
+gcc -Os -Wall -Werror -static -o bin/pause-%{archname} pause.c
76
+strip bin/pause-%{archname}
77
+popd
78
+
79
+%ifarch x86_64
80
+make WHAT="cmd/kubectl" KUBE_BUILD_PLATFORMS="darwin/%{archname} windows/%{archname}"
81
+%endif
82
+
83
+%install
84
+install -vdm644 %{buildroot}/etc/profile.d
85
+install -m 755 -d %{buildroot}%{_bindir}
86
+install -m 755 -d %{buildroot}/opt/vmware/kubernetes
87
+install -m 755 -d %{buildroot}/opt/vmware/kubernetes/linux/%{archname}
88
+%ifarch x86_64
89
+install -m 755 -d %{buildroot}/opt/vmware/kubernetes/darwin/%{archname}
90
+install -m 755 -d %{buildroot}/opt/vmware/kubernetes/windows/%{archname}
91
+%endif
92
+
93
+binaries=(cloud-controller-manager hyperkube kube-apiserver kube-controller-manager kubelet kube-proxy kube-scheduler kubectl)
94
+for bin in "${binaries[@]}"; do
95
+  echo "+++ INSTALLING ${bin}"
96
+  install -p -m 755 -t %{buildroot}%{_bindir} _output/local/bin/linux/%{archname}/${bin}
97
+done
98
+install -p -m 755 -t %{buildroot}%{_bindir} build/pause/bin/pause-%{archname}
99
+
100
+# kubectl-extras
101
+install -p -m 755 -t %{buildroot}/opt/vmware/kubernetes/linux/%{archname}/ _output/local/bin/linux/%{archname}/kubectl
102
+%ifarch x86_64
103
+install -p -m 755 -t %{buildroot}/opt/vmware/kubernetes/darwin/%{archname}/ _output/local/bin/darwin/%{archname}/kubectl
104
+install -p -m 755 -t %{buildroot}/opt/vmware/kubernetes/windows/%{archname}/ _output/local/bin/windows/%{archname}/kubectl.exe
105
+%endif
106
+
107
+# kubeadm install
108
+install -vdm644 %{buildroot}/etc/systemd/system/kubelet.service.d
109
+install -p -m 755 -t %{buildroot}%{_bindir} _output/local/bin/linux/%{archname}/kubeadm
110
+install -p -m 755 -t %{buildroot}/etc/systemd/system build/rpms/kubelet.service
111
+install -p -m 755 -t %{buildroot}/etc/systemd/system/kubelet.service.d build/rpms/10-kubeadm.conf
112
+sed -i '/KUBELET_CGROUP_ARGS=--cgroup-driver=systemd/d' %{buildroot}/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
113
+
114
+cd ..
115
+# install config files
116
+install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}
117
+install -m 644 -t %{buildroot}%{_sysconfdir}/%{name} contrib-0.7.0/init/systemd/environ/*
118
+cat << EOF >> %{buildroot}%{_sysconfdir}/%{name}/kubeconfig
119
+apiVersion: v1
120
+clusters:
121
+- cluster:
122
+    server: http://127.0.0.1:8080
123
+EOF
124
+sed -i '/KUBELET_API_SERVER/c\KUBELET_API_SERVER="--kubeconfig=/etc/kubernetes/kubeconfig"' %{buildroot}%{_sysconfdir}/%{name}/kubelet
125
+
126
+# install service files
127
+install -d -m 0755 %{buildroot}/usr/lib/systemd/system
128
+install -m 0644 -t %{buildroot}/usr/lib/systemd/system contrib-0.7.0/init/systemd/*.service
129
+
130
+# install the place the kubelet defaults to put volumes
131
+install -dm755 %{buildroot}/var/lib/kubelet
132
+install -dm755 %{buildroot}/var/run/kubernetes
133
+
134
+mkdir -p %{buildroot}/%{_lib}/tmpfiles.d
135
+cat << EOF >> %{buildroot}/%{_lib}/tmpfiles.d/kubernetes.conf
136
+d /var/run/kubernetes 0755 kube kube -
137
+EOF
138
+
139
+%check
140
+export GOPATH=%{_builddir}
141
+go get golang.org/x/tools/cmd/cover
142
+make %{?_smp_mflags} check
143
+
144
+%clean
145
+rm -rf %{buildroot}/*
146
+
147
+%pre
148
+if [ $1 -eq 1 ]; then
149
+    # Initial installation.
150
+    getent group kube >/dev/null || groupadd -r kube
151
+    getent passwd kube >/dev/null || useradd -r -g kube -d / -s /sbin/nologin \
152
+            -c "Kubernetes user" kube
153
+fi
154
+
155
+%post
156
+chown -R kube:kube /var/lib/kubelet
157
+chown -R kube:kube /var/run/kubernetes
158
+systemctl daemon-reload
159
+
160
+%post kubeadm
161
+systemctl daemon-reload
162
+systemctl stop kubelet
163
+systemctl enable kubelet
164
+
165
+%preun kubeadm
166
+if [ $1 -eq 0 ]; then
167
+    systemctl stop kubelet
168
+fi
169
+
170
+%postun
171
+if [ $1 -eq 0 ]; then
172
+    # Package deletion
173
+    userdel kube
174
+    groupdel kube
175
+    systemctl daemon-reload
176
+fi
177
+
178
+%postun kubeadm
179
+if [ $1 -eq 0 ]; then
180
+    systemctl daemon-reload
181
+fi
182
+
183
+%files
184
+%defattr(-,root,root)
185
+%{_bindir}/cloud-controller-manager
186
+%{_bindir}/hyperkube
187
+%{_bindir}/kube-apiserver
188
+%{_bindir}/kube-controller-manager
189
+%{_bindir}/kubelet
190
+%{_bindir}/kube-proxy
191
+%{_bindir}/kube-scheduler
192
+%{_bindir}/kubectl
193
+#%{_bindir}/kubefed
194
+%{_lib}/systemd/system/kube-apiserver.service
195
+%{_lib}/systemd/system/kubelet.service
196
+%{_lib}/systemd/system/kube-scheduler.service
197
+%{_lib}/systemd/system/kube-controller-manager.service
198
+%{_lib}/systemd/system/kube-proxy.service
199
+%{_lib}/tmpfiles.d/kubernetes.conf
200
+%dir %{_sysconfdir}/%{name}
201
+%dir /var/lib/kubelet
202
+%dir /var/run/kubernetes
203
+%config(noreplace) %{_sysconfdir}/%{name}/config
204
+%config(noreplace) %{_sysconfdir}/%{name}/apiserver
205
+%config(noreplace) %{_sysconfdir}/%{name}/controller-manager
206
+%config(noreplace) %{_sysconfdir}/%{name}/proxy
207
+%config(noreplace) %{_sysconfdir}/%{name}/kubelet
208
+%config(noreplace) %{_sysconfdir}/%{name}/kubeconfig
209
+%config(noreplace) %{_sysconfdir}/%{name}/scheduler
210
+
211
+%files kubeadm
212
+%defattr(-,root,root)
213
+%{_bindir}/kubeadm
214
+/etc/systemd/system/kubelet.service
215
+/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
216
+
217
+%files pause
218
+%defattr(-,root,root)
219
+%{_bindir}/pause-%{archname}
220
+
221
+%files kubectl-extras
222
+%defattr(-,root,root)
223
+/opt/vmware/kubernetes/linux/%{archname}/kubectl
224
+%ifarch x86_64
225
+/opt/vmware/kubernetes/darwin/%{archname}/kubectl
226
+/opt/vmware/kubernetes/windows/%{archname}/kubectl.exe
227
+%endif
228
+
229
+%changelog
230
+*   Wed May 08 2019 Ashwin H <ashwinh@vmware.com> 1.12.7-1
231
+-   Update to 1.12.7
232
+*   Thu Feb 28 2019 Ashwin H <ashwinh@vmware.com> 1.12.5-2
233
+-   Fix build error for ARM.
234
+*   Thu Feb 21 2019 Ashwin H <ashwinh@vmware.com> 1.12.5-1
235
+-   Update to 1.12.5-1
... ...
@@ -1,6 +1,6 @@
1 1
 #
2 2
 # Automatically generated file; DO NOT EDIT.
3
-# Linux/x86 4.19.26 Kernel Configuration
3
+# Linux/x86 4.19.40 Kernel Configuration
4 4
 #
5 5
 
6 6
 #
... ...
@@ -869,10 +869,10 @@ CONFIG_IOSCHED_NOOP=y
869 869
 CONFIG_IOSCHED_DEADLINE=y
870 870
 CONFIG_IOSCHED_CFQ=y
871 871
 CONFIG_CFQ_GROUP_IOSCHED=y
872
-# CONFIG_DEFAULT_DEADLINE is not set
873
-CONFIG_DEFAULT_CFQ=y
872
+CONFIG_DEFAULT_DEADLINE=y
873
+# CONFIG_DEFAULT_CFQ is not set
874 874
 # CONFIG_DEFAULT_NOOP is not set
875
-CONFIG_DEFAULT_IOSCHED="cfq"
875
+CONFIG_DEFAULT_IOSCHED="deadline"
876 876
 CONFIG_MQ_IOSCHED_DEADLINE=y
877 877
 CONFIG_MQ_IOSCHED_KYBER=y
878 878
 # CONFIG_IOSCHED_BFQ is not set
... ...
@@ -1,6 +1,6 @@
1 1
 #
2 2
 # Automatically generated file; DO NOT EDIT.
3
-# Linux/x86 4.19.26 Kernel Configuration
3
+# Linux/x86 4.19.40 Kernel Configuration
4 4
 #
5 5
 
6 6
 #
... ...
@@ -626,7 +626,7 @@ CONFIG_AMD_NB=y
626 626
 # Binary Emulations
627 627
 #
628 628
 CONFIG_IA32_EMULATION=y
629
-CONFIG_IA32_AOUT=m
629
+# CONFIG_IA32_AOUT is not set
630 630
 # CONFIG_X86_X32 is not set
631 631
 CONFIG_COMPAT_32=y
632 632
 CONFIG_COMPAT=y
... ...
@@ -1,6 +1,6 @@
1 1
 #
2 2
 # Automatically generated file; DO NOT EDIT.
3
-# Linux/x86 4.19.26 Kernel Configuration
3
+# Linux/x86 4.19.40 Kernel Configuration
4 4
 #
5 5
 
6 6
 #
... ...
@@ -835,10 +835,10 @@ CONFIG_IOSCHED_NOOP=y
835 835
 CONFIG_IOSCHED_DEADLINE=y
836 836
 CONFIG_IOSCHED_CFQ=y
837 837
 CONFIG_CFQ_GROUP_IOSCHED=y
838
-# CONFIG_DEFAULT_DEADLINE is not set
839
-CONFIG_DEFAULT_CFQ=y
838
+CONFIG_DEFAULT_DEADLINE=y
839
+# CONFIG_DEFAULT_CFQ is not set
840 840
 # CONFIG_DEFAULT_NOOP is not set
841
-CONFIG_DEFAULT_IOSCHED="cfq"
841
+CONFIG_DEFAULT_IOSCHED="deadline"
842 842
 # CONFIG_MQ_IOSCHED_DEADLINE is not set
843 843
 # CONFIG_MQ_IOSCHED_KYBER is not set
844 844
 # CONFIG_IOSCHED_BFQ is not set
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-aws
4 4
 Version:        4.19.40
5
-Release:        1%{?kat_build:.%kat_build}%{?dist}
5
+Release:        3%{?kat_build:.%kat_build}%{?dist}
6 6
 License:    	GPLv2
7 7
 URL:        	http://www.kernel.org/
8 8
 Group:        	System Environment/Kernel
... ...
@@ -12,6 +12,7 @@ Source0:        http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar
12 12
 %define sha1 linux=c04181c3736e5b85d349f9b58d406d4c18ad4958
13 13
 Source1:	config-aws
14 14
 Source2:	initramfs.trigger
15
+Source3:        update_photon_cfg.postun
15 16
 # common
16 17
 Patch0:         linux-4.14-Log-kmsg-dump-on-panic.patch
17 18
 Patch1:         double-tcp_mem-limits.patch
... ...
@@ -83,6 +84,7 @@ BuildRequires:  procps-ng-devel
83 83
 BuildRequires:	audit-devel
84 84
 Requires:       filesystem kmod
85 85
 Requires(post):(coreutils or toybox)
86
+Requires(postun):(coreutils or toybox)
86 87
 %define uname_r %{version}-%{release}-aws
87 88
 
88 89
 %description
... ...
@@ -286,6 +288,7 @@ find %{buildroot}/lib/modules -name '*.ko' -print0 | xargs -0 chmod u+x
286 286
 make -C tools JOBS=1 DESTDIR=%{buildroot} prefix=%{_prefix} perf_install
287 287
 
288 288
 %include %{SOURCE2}
289
+%include %{SOURCE3}
289 290
 
290 291
 %post
291 292
 /sbin/depmod -aq %{uname_r}
... ...
@@ -357,6 +360,11 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
357 357
 %{_libdir}/perf/include/bpf/*
358 358
 
359 359
 %changelog
360
+*   Thu May 23 2019 Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu> 4.19.40-3
361
+-   Fix CVE-2019-11191 by deprecating a.out file format support.
362
+*   Tue May 14 2019 Keerthana K <keerthanak@vmware.com> 4.19.40-2
363
+-   Fix to parse through /boot folder and update symlink (/boot/photon.cfg) if
364
+-   mulitple kernels are installed and current linux kernel is removed.
360 365
 *   Tue May 07 2019 Ajay Kaher <akaher@vmware.com> 4.19.40-1
361 366
 -   Update to version 4.19.40
362 367
 *   Fri Mar 29 2019 Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu> 4.19.32-2
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-esx
4 4
 Version:        4.19.40
5
-Release:        1%{?dist}
5
+Release:        2%{?dist}
6 6
 License:        GPLv2
7 7
 URL:            http://www.kernel.org/
8 8
 Group:          System Environment/Kernel
... ...
@@ -12,6 +12,7 @@ Source0:        http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar
12 12
 %define sha1 linux=c04181c3736e5b85d349f9b58d406d4c18ad4958
13 13
 Source1:        config-esx
14 14
 Source2:        initramfs.trigger
15
+Source3:        update_photon_cfg.postun
15 16
 # common
16 17
 Patch0:         linux-4.14-Log-kmsg-dump-on-panic.patch
17 18
 Patch1:         double-tcp_mem-limits.patch
... ...
@@ -55,6 +56,7 @@ BuildRequires: openssl-devel
55 55
 BuildRequires: procps-ng-devel
56 56
 Requires:      filesystem kmod
57 57
 Requires(post):(coreutils or toybox)
58
+Requires(postun):(coreutils or toybox)
58 59
 %define uname_r %{version}-%{release}-esx
59 60
 
60 61
 %description
... ...
@@ -168,6 +170,7 @@ ln -sf /usr/src/linux-headers-%{uname_r} %{buildroot}/lib/modules/%{uname_r}/bui
168 168
 find %{buildroot}/lib/modules -name '*.ko' -print0 | xargs -0 chmod u+x
169 169
 
170 170
 %include %{SOURCE2}
171
+%include %{SOURCE3}
171 172
 
172 173
 %post
173 174
 /sbin/depmod -a %{uname_r}
... ...
@@ -194,6 +197,9 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
194 194
 /usr/src/linux-headers-%{uname_r}
195 195
 
196 196
 %changelog
197
+*   Tue May 14 2019 Keerthana K <keerthanak@vmware.com> 4.19.40-2
198
+-   Fix to parse through /boot folder and update symlink (/boot/photon.cfg) if
199
+-   mulitple kernels are installed and current linux kernel is removed.
197 200
 *   Tue May 07 2019 Ajay Kaher <akaher@vmware.com> 4.19.40-1
198 201
 -   Update to version 4.19.40
199 202
 *   Fri May 03 2019 Ajay Kaher <akaher@vmware.com> 4.19.32-3
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux-secure
4 4
 Version:        4.19.40
5
-Release:        1%{?kat_build:.%kat_build}%{?dist}
5
+Release:        3%{?kat_build:.%kat_build}%{?dist}
6 6
 License:        GPLv2
7 7
 URL:            http://www.kernel.org/
8 8
 Group:          System Environment/Kernel
... ...
@@ -12,6 +12,7 @@ Source0:        http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{version}.tar
12 12
 %define sha1 linux=c04181c3736e5b85d349f9b58d406d4c18ad4958
13 13
 Source1:        config-secure
14 14
 Source2:        initramfs.trigger
15
+Source3:        update_photon_cfg.postun
15 16
 # common
16 17
 Patch0:         linux-4.14-Log-kmsg-dump-on-panic.patch
17 18
 Patch1:         double-tcp_mem-limits.patch
... ...
@@ -60,6 +61,7 @@ BuildRequires:  openssl-devel
60 60
 BuildRequires:  procps-ng-devel
61 61
 Requires:       filesystem kmod
62 62
 Requires(post):(coreutils or toybox)
63
+Requires(postun):(coreutils or toybox)
63 64
 %define uname_r %{version}-%{release}-secure
64 65
 
65 66
 %description
... ...
@@ -202,6 +204,7 @@ ln -sf /usr/src/linux-headers-%{uname_r} %{buildroot}/lib/modules/%{uname_r}/bui
202 202
 
203 203
 
204 204
 %include %{SOURCE2}
205
+%include %{SOURCE3}
205 206
 
206 207
 %post
207 208
 /sbin/depmod -a %{uname_r}
... ...
@@ -236,6 +239,11 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
236 236
 /usr/src/linux-headers-%{uname_r}
237 237
 
238 238
 %changelog
239
+*   Tue May 28 2019 Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu> 4.19.40-3
240
+-   Change default I/O scheduler to 'deadline' to fix performance issue.
241
+*   Tue May 14 2019 Keerthana K <keerthanak@vmware.com> 4.19.40-2
242
+-   Fix to parse through /boot folder and update symlink (/boot/photon.cfg) if
243
+-   mulitple kernels are installed and current linux kernel is removed.
239 244
 *   Tue May 07 2019 Ajay Kaher <akaher@vmware.com> 4.19.40-1
240 245
 -   Update to version 4.19.40
241 246
 *   Fri Mar 29 2019 Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu> 4.19.32-2
... ...
@@ -2,7 +2,7 @@
2 2
 Summary:        Kernel
3 3
 Name:           linux
4 4
 Version:        4.19.40
5
-Release:        1%{?kat_build:.%kat_build}%{?dist}
5
+Release:        3%{?kat_build:.%kat_build}%{?dist}
6 6
 License:    	GPLv2
7 7
 URL:        	http://www.kernel.org/
8 8
 Group:        	System Environment/Kernel
... ...
@@ -18,6 +18,7 @@ Source3:	https://github.com/amzn/amzn-drivers/archive/ena_linux_%{ena_version}.t
18 18
 Source4:	config_aarch64
19 19
 Source5:	xr_usb_serial_common_lnx-3.6-and-newer-pak.tar.xz
20 20
 %define sha1 xr=74df7143a86dd1519fa0ccf5276ed2225665a9db
21
+Source6:        update_photon_cfg.postun
21 22
 # common
22 23
 Patch0:         linux-4.14-Log-kmsg-dump-on-panic.patch
23 24
 Patch1:         double-tcp_mem-limits.patch
... ...
@@ -89,6 +90,7 @@ BuildRequires:  procps-ng-devel
89 89
 BuildRequires:	audit-devel
90 90
 Requires:       filesystem kmod
91 91
 Requires(post):(coreutils or toybox)
92
+Requires(postun):(coreutils or toybox)
92 93
 %define uname_r %{version}-%{release}
93 94
 
94 95
 %description
... ...
@@ -354,6 +356,7 @@ cp arch/arm64/kernel/module.lds %{buildroot}/usr/src/%{name}-headers-%{uname_r}/
354 354
 make -C tools JOBS=1 DESTDIR=%{buildroot} prefix=%{_prefix} perf_install
355 355
 
356 356
 %include %{SOURCE2}
357
+%include %{SOURCE6}
357 358
 
358 359
 %post
359 360
 /sbin/depmod -a %{uname_r}
... ...
@@ -439,6 +442,11 @@ ln -sf %{name}-%{uname_r}.cfg /boot/photon.cfg
439 439
 %endif
440 440
 
441 441
 %changelog
442
+*   Tue May 28 2019 Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu> 4.19.40-3
443
+-   Change default I/O scheduler to 'deadline' to fix performance issue.
444
+*   Tue May 14 2019 Keerthana K <keerthanak@vmware.com> 4.19.40-2
445
+-   Fix to parse through /boot folder and update symlink (/boot/photon.cfg) if
446
+-   mulitple kernels are installed and current linux kernel is removed.
442 447
 *   Tue May 07 2019 Ajay Kaher <akaher@vmware.com> 4.19.40-1
443 448
 -   Update to version 4.19.40
444 449
 *   Thu Apr 11 2019 Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu> 4.19.32-3
445 450
new file mode 100644
... ...
@@ -0,0 +1,9 @@
0
+%postun
1
+if [ ! -e /boot/photon.cfg ]
2
+then
3
+     if [ `ls /boot/linux-*.cfg 1> /dev/null 2>&1` ]
4
+     then
5
+          list=`ls -tu /boot/linux-*.cfg | head -n1`
6
+          test -n "$list" && ln -sf "$list" /boot/photon.cfg
7
+     fi
8
+fi
0 9
new file mode 100644
... ...
@@ -0,0 +1,31 @@
0
+--- a/mercurial/cext/manifest.c	Wed Sep 05 21:32:45 2018 +0900
1
+@@ -51,7 +51,12 @@
2
+ {
3
+ 	char *s = l->start;
4
+ 	ssize_t llen = pathlen(l);
5
+-	PyObject *hash = unhexlify(s + llen + 1, 40);
6
++	PyObject *hash;
7
++	if (llen + 1 + 40 + 1 > l->len) { /* path '\0' hash '\n' */
8
++		PyErr_SetString(PyExc_ValueError, "manifest line too short");
9
++		return NULL;
10
++	}
11
++	hash = unhexlify(s + llen + 1, 40);
12
+ 	if (!hash) {
13
+ 		return NULL;
14
+ 	}
15
+@@ -249,10 +254,13 @@
16
+ 	pl = pathlen(l);
17
+ 	path = PyBytes_FromStringAndSize(l->start, pl);
18
+ 	hash = nodeof(l);
19
++	if (!path || !hash) {
20
++		goto done;
21
++	}
22
+ 	consumed = pl + 41;
23
+ 	flags = PyBytes_FromStringAndSize(l->start + consumed,
24
+ 					   l->len - consumed - 1);
25
+-	if (!path || !hash || !flags) {
26
++	if (!flags) {
27
+ 		goto done;
28
+ 	}
29
+ 	ret = PyTuple_Pack(3, path, hash, flags);
... ...
@@ -3,7 +3,7 @@
3 3
 Summary:        A free, distributed source control management tool.
4 4
 Name:           mercurial
5 5
 Version:        4.7.1
6
-Release:        2%{?dist}
6
+Release:        3%{?dist}
7 7
 License:        GPLv2+
8 8
 URL:            https://www.mercurial-scm.org
9 9
 Group:          System Environment/Security
... ...
@@ -12,6 +12,7 @@ Distribution:   Photon
12 12
 Source0:        https://www.mercurial-scm.org/release/%{name}-%{version}.tar.gz
13 13
 %define sha1    mercurial=33e7e6abb29136ee613c347a0c48a72d978a830c
14 14
 Patch0:         mercurial-disable-zstd.patch
15
+Patch1:         mercurial-fix-CVE-2018-17983.patch
15 16
 BuildRequires:  python2
16 17
 BuildRequires:  python2-libs
17 18
 BuildRequires:  python2-devel
... ...
@@ -24,6 +25,7 @@ Mercurial is written in Python and is used by projects such as Mozilla and Vim.
24 24
 %prep
25 25
 %setup -q
26 26
 %patch0 -p1
27
+%patch1 -p1
27 28
 
28 29
 %build
29 30
 make %{?_smp_mflags} build
... ...
@@ -59,6 +61,8 @@ rm -rf %{buildroot}/*
59 59
 %{python2_sitelib}/*
60 60
 
61 61
 %changelog
62
+*   Mon May 06 2019 Keerthana K <keerthanak@vmware.com> 4.7.1-3
63
+-   Fix CVE-2018-17983
62 64
 *   Thu Oct 25 2018 Sujay G <gsujay@vmware.com> 4.7.1-2
63 65
 -   Disable zstd
64 66
 *   Mon Sep 10 2018 Srivatsa S. Bhat <srivatsa@csail.mit.edu> 4.7.1-1
... ...
@@ -3,14 +3,14 @@
3 3
 Summary:	OpenJDK
4 4
 Name:		openjdk8
5 5
 Version:	1.8.0.212
6
-Release:	1%{?dist}
6
+Release:	2%{?dist}
7 7
 License:	GNU GPL
8 8
 URL:		https://openjdk.java.net
9 9
 Group:		Development/Tools
10 10
 Vendor:		VMware, Inc.
11 11
 Distribution:   Photon
12
-Source0:	http://www.java.net/download/openjdk/jdk8/promoted/b162/openjdk-%{version}.tar.gz
13
-%define sha1 openjdk=43e9e7bf0c311c5067f660afc46e3241b585c11e
12
+Source0:	http://www.java.net/download/openjdk/jdk8/promoted/b162/openjdk-%{version}-b04.tar.gz
13
+%define sha1 openjdk=e619f3fca5d8b808760e3c74703e8d3e698414bc
14 14
 Patch0:		Awt_build_headless_only.patch
15 15
 Patch1:		check-system-ca-certs.patch
16 16
 BuildArch:      x86_64
... ...
@@ -67,7 +67,7 @@ Requires:       %{name} = %{version}-%{release}
67 67
 This package provides the runtime library class sources.
68 68
 
69 69
 %prep -p exit
70
-%setup -qn openjdk-%{version}
70
+%setup -qn openjdk-%{version}-b04
71 71
 %patch0 -p1
72 72
 %patch1 -p1
73 73
 rm jdk/src/solaris/native/sun/awt/CUPSfuncs.c
... ...
@@ -244,6 +244,9 @@ rm -rf %{buildroot}/*
244 244
 %{_libdir}/jvm/OpenJDK-%{version}/src.zip
245 245
 
246 246
 %changelog
247
+*   Tue May 20 2019 Tapas Kundu <tkundu@vmware.com> 1.8.0.212-2
248
+-   Upgrade to version 1.8.0.212 b04
249
+-   Included fix for performance regression.
247 250
 *   Thu May 02 2019 Tapas Kundu <tkundu@vmware.com> 1.8.0.212-1
248 251
 -   Upgrade to version 1.8.0.212
249 252
 -   Add new clhsdb and hsdb binaries.
250 253
new file mode 100644
... ...
@@ -0,0 +1,99 @@
0
+From be5de958e9052e322b0087c6dba81cdad0c3e031 Mon Sep 17 00:00:00 2001
1
+From: "Miss Islington (bot)"
2
+ <31488909+miss-islington@users.noreply.github.com>
3
+Date: Tue, 15 Jan 2019 15:03:36 -0800
4
+Subject: [PATCH] bpo-35746: Fix segfault in ssl's cert parser (GH-11569)
5
+
6
+Fix a NULL pointer deref in ssl module. The cert parser did not handle CRL
7
+distribution points with empty DP or URI correctly. A malicious or buggy
8
+certificate can result into segfault.
9
+
10
+Signed-off-by: Christian Heimes <christian@python.org>
11
+
12
+https://bugs.python.org/issue35746
13
+(cherry picked from commit a37f52436f9aa4b9292878b72f3ff1480e2606c3)
14
+
15
+Co-authored-by: Christian Heimes <christian@python.org>
16
+
17
+--- a/Lib/test/talos-2019-0758.pem_org	2019-05-23 19:43:42.334357436 +0530
18
+@@ -0,0 +1,22 @@
19
++MIIDqDCCApKgAwIBAgIBAjALBgkqhkiG9w0BAQswHzELMAkGA1UEBhMCVUsxEDAO
20
++BgNVBAMTB2NvZHktY2EwHhcNMTgwNjE4MTgwMDU4WhcNMjgwNjE0MTgwMDU4WjA7
21
++MQswCQYDVQQGEwJVSzEsMCoGA1UEAxMjY29kZW5vbWljb24tdm0tMi50ZXN0Lmxh
22
++bC5jaXNjby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC63fGB
23
++J80A9Av1GB0bptslKRIUtJm8EeEu34HkDWbL6AJY0P8WfDtlXjlPaLqFa6sqH6ES
24
++V48prSm1ZUbDSVL8R6BYVYpOlK8/48xk4pGTgRzv69gf5SGtQLwHy8UPBKgjSZoD
25
++5a5k5wJXGswhKFFNqyyxqCvWmMnJWxXTt2XDCiWc4g4YAWi4O4+6SeeHVAV9rV7C
26
++1wxqjzKovVe2uZOHjKEzJbbIU6JBPb6TRfMdRdYOw98n1VXDcKVgdX2DuuqjCzHP
27
++WhU4Tw050M9NaK3eXp4Mh69VuiKoBGOLSOcS8reqHIU46Reg0hqeL8LIL6OhFHIF
28
++j7HR6V1X6F+BfRS/AgMBAAGjgdYwgdMwCQYDVR0TBAIwADAdBgNVHQ4EFgQUOktp
29
++HQjxDXXUg8prleY9jeLKeQ4wTwYDVR0jBEgwRoAUx6zgPygZ0ZErF9sPC4+5e2Io
30
++UU+hI6QhMB8xCzAJBgNVBAYTAlVLMRAwDgYDVQQDEwdjb2R5LWNhggkA1QEAuwb7
31
++2s0wCQYDVR0SBAIwADAuBgNVHREEJzAlgiNjb2Rlbm9taWNvbi12bS0yLnRlc3Qu
32
++bGFsLmNpc2NvLmNvbTAOBgNVHQ8BAf8EBAMCBaAwCwYDVR0fBAQwAjAAMAsGCSqG
33
++SIb3DQEBCwOCAQEAvqantx2yBlM11RoFiCfi+AfSblXPdrIrHvccepV4pYc/yO6p
34
++t1f2dxHQb8rWH3i6cWag/EgIZx+HJQvo0rgPY1BFJsX1WnYf1/znZpkUBGbVmlJr
35
++t/dW1gSkNS6sPsM0Q+7HPgEv8CPDNK5eo7vU2seE0iWOkxSyVUuiCEY9ZVGaLVit
36
++p0C78nZ35Pdv4I+1cosmHl28+es1WI22rrnmdBpH8J1eY6WvUw2xuZHLeNVN0TzV
37
++Q3qq53AaCWuLOD1AjESWuUCxMZTK9DPS4JKXTK8RLyDeqOvJGjsSWp3kL0y3GaQ+
38
++10T1rfkKJub2+m9A9duin1fn6tHc2wSvB7m3DA==
39
++-----END CERTIFICATE-----
40
+--- a/Lib/test/test_ssl.py_org	2019-05-23 19:44:27.710358343 +0530
41
+@@ -117,6 +117,7 @@ NONEXISTINGCERT = data_file("XXXnonexist
42
+ BADKEY = data_file("badkey.pem")
43
+ NOKIACERT = data_file("nokia.pem")
44
+ NULLBYTECERT = data_file("nullbytecert.pem")
45
++TALOS_INVALID_CRLDP = data_file("talos-2019-0758.pem")
46
+ 
47
+ DHFILE = data_file("dh1024.pem")
48
+ BYTES_DHFILE = os.fsencode(DHFILE)
49
+@@ -364,6 +365,27 @@ class BasicSocketTests(unittest.TestCase
50
+         self.assertEqual(p['crlDistributionPoints'],
51
+                          ('http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl',))
52
+ 
53
++    def test_parse_cert_CVE_2019_5010(self):
54
++        p = ssl._ssl._test_decode_cert(TALOS_INVALID_CRLDP)
55
++        if support.verbose:
56
++            sys.stdout.write("\n" + pprint.pformat(p) + "\n")
57
++        self.assertEqual(
58
++            p,
59
++            {
60
++                'issuer': (
61
++                    (('countryName', 'UK'),), (('commonName', 'cody-ca'),)),
62
++                'notAfter': 'Jun 14 18:00:58 2028 GMT',
63
++                'notBefore': 'Jun 18 18:00:58 2018 GMT',
64
++                'serialNumber': '02',
65
++                'subject': ((('countryName', 'UK'),),
66
++                            (('commonName',
67
++                              'codenomicon-vm-2.test.lal.cisco.com'),)),
68
++                'subjectAltName': (
69
++                    ('DNS', 'codenomicon-vm-2.test.lal.cisco.com'),),
70
++                'version': 3
71
++            }
72
++        )
73
++
74
+     def test_parse_cert_CVE_2013_4238(self):
75
+         p = ssl._ssl._test_decode_cert(NULLBYTECERT)
76
+         if support.verbose:
77
+--- a/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst_org	2019-05-23 19:46:36.086360907 +0530
78
+@@ -0,0 +1,3 @@
79
++[CVE-2019-5010] Fix a NULL pointer deref in ssl module. The cert parser did
80
++not handle CRL distribution points with empty DP or URI correctly. A
81
++malicious or buggy certificate can result into segfault.
82
+--- a/Modules/_ssl.c_org	2019-05-23 19:47:08.374361552 +0530
83
+@@ -1501,6 +1501,10 @@ _get_crl_dp(X509 *certificate) {
84
+         STACK_OF(GENERAL_NAME) *gns;
85
+ 
86
+         dp = sk_DIST_POINT_value(dps, i);
87
++        if (dp->distpoint == NULL) {
88
++            /* Ignore empty DP value, CVE-2019-5010 */
89
++            continue;
90
++        }
91
+         gns = dp->distpoint->name.fullname;
92
+ 
93
+         for (j=0; j < sk_GENERAL_NAME_num(gns); j++) {
0 94
new file mode 100644
... ...
@@ -0,0 +1,147 @@
0
+From 7e200e0763f5b71c199aaf98bd5588f291585619 Mon Sep 17 00:00:00 2001
1
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
2
+Date: Tue, 7 May 2019 17:28:47 +0200
3
+Subject: [PATCH] bpo-30458: Disallow control chars in http URLs. (GH-12755)
4
+ (GH-13154)
5
+MIME-Version: 1.0
6
+Content-Type: text/plain; charset=UTF-8
7
+Content-Transfer-Encoding: 8bit
8
+
9
+Disallow control chars in http URLs in urllib.urlopen.  This addresses a potential security problem for applications that do not sanity check their URLs where http request headers could be injected.
10
+
11
+Disable https related urllib tests on a build without ssl (GH-13032)
12
+These tests require an SSL enabled build. Skip these tests when python is built without SSL to fix test failures.
13
+
14
+Use http.client.InvalidURL instead of ValueError as the new error case's exception. (GH-13044)
15
+
16
+Backport Co-Authored-By: Miro Hrončok <miro@hroncok.cz>
17
+---
18
+ Lib/http/client.py                            | 15 ++++++
19
+ Lib/test/test_urllib.py                       | 53 +++++++++++++++++++
20
+ Lib/test/test_xmlrpc.py                       |  7 ++-
21
+ .../2019-04-10-08-53-30.bpo-30458.51E-DA.rst  |  1 +
22
+ 4 files changed, 75 insertions(+), 1 deletion(-)
23
+ create mode 100644 Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
24
+
25
+diff --git a/Lib/http/client.py b/Lib/http/client.py
26
+index 1de151c38e92..2afd452fe30f 100644
27
+--- a/Lib/http/client.py
28
+@@ -140,6 +140,16 @@
29
+ _is_legal_header_name = re.compile(rb'[^:\s][^:\r\n]*').fullmatch
30
+ _is_illegal_header_value = re.compile(rb'\n(?![ \t])|\r(?![ \t\n])').search
31
+ 
32
++# These characters are not allowed within HTTP URL paths.
33
++#  See https://tools.ietf.org/html/rfc3986#section-3.3 and the
34
++#  https://tools.ietf.org/html/rfc3986#appendix-A pchar definition.
35
++# Prevents CVE-2019-9740.  Includes control characters such as \r\n.
36
++# We don't restrict chars above \x7f as putrequest() limits us to ASCII.
37
++_contains_disallowed_url_pchar_re = re.compile('[\x00-\x20\x7f]')
38
++# Arguably only these _should_ allowed:
39
++#  _is_allowed_url_pchars_re = re.compile(r"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$")
40
++# We are more lenient for assumed real world compatibility purposes.
41
++
42
+ # We always set the Content-Length header for these methods because some
43
+ # servers will otherwise respond with a 411
44
+ _METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'}
45
+@@ -1101,6 +1111,11 @@ def putrequest(self, method, url, skip_host=False,
46
+         self._method = method
47
+         if not url:
48
+             url = '/'
49
++        # Prevent CVE-2019-9740.
50
++        match = _contains_disallowed_url_pchar_re.search(url)
51
++        if match:
52
++            raise InvalidURL(f"URL can't contain control characters. {url!r} "
53
++                             f"(found at least {match.group()!r})")
54
+         request = '%s %s %s' % (method, url, self._http_vsn_str)
55
+ 
56
+         # Non-ASCII characters should have been eliminated earlier
57
+diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
58
+index 2ac73b58d832..7214492eca9d 100644
59
+--- a/Lib/test/test_urllib.py
60
+@@ -329,6 +329,59 @@ def test_willclose(self):
61
+         finally:
62
+             self.unfakehttp()
63
+ 
64
++    @unittest.skipUnless(ssl, "ssl module required")
65
++    def test_url_with_control_char_rejected(self):
66
++        for char_no in list(range(0, 0x21)) + [0x7f]:
67
++            char = chr(char_no)
68
++            schemeless_url = f"//localhost:7777/test{char}/"
69
++            self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
70
++            try:
71
++                # We explicitly test urllib.request.urlopen() instead of the top
72
++                # level 'def urlopen()' function defined in this... (quite ugly)
73
++                # test suite.  They use different url opening codepaths.  Plain
74
++                # urlopen uses FancyURLOpener which goes via a codepath that
75
++                # calls urllib.parse.quote() on the URL which makes all of the
76
++                # above attempts at injection within the url _path_ safe.
77
++                escaped_char_repr = repr(char).replace('\\', r'\\')
78
++                InvalidURL = http.client.InvalidURL
79
++                with self.assertRaisesRegex(
80
++                    InvalidURL, f"contain control.*{escaped_char_repr}"):
81
++                    urllib.request.urlopen(f"http:{schemeless_url}")
82
++                with self.assertRaisesRegex(
83
++                    InvalidURL, f"contain control.*{escaped_char_repr}"):
84
++                    urllib.request.urlopen(f"https:{schemeless_url}")
85
++                # This code path quotes the URL so there is no injection.
86
++                resp = urlopen(f"http:{schemeless_url}")
87
++                self.assertNotIn(char, resp.geturl())
88
++            finally:
89
++                self.unfakehttp()
90
++
91
++    @unittest.skipUnless(ssl, "ssl module required")
92
++    def test_url_with_newline_header_injection_rejected(self):
93
++        self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
94
++        host = "localhost:7777?a=1 HTTP/1.1\r\nX-injected: header\r\nTEST: 123"
95
++        schemeless_url = "//" + host + ":8080/test/?test=a"
96
++        try:
97
++            # We explicitly test urllib.request.urlopen() instead of the top
98
++            # level 'def urlopen()' function defined in this... (quite ugly)
99
++            # test suite.  They use different url opening codepaths.  Plain
100
++            # urlopen uses FancyURLOpener which goes via a codepath that
101
++            # calls urllib.parse.quote() on the URL which makes all of the
102
++            # above attempts at injection within the url _path_ safe.
103
++            InvalidURL = http.client.InvalidURL
104
++            with self.assertRaisesRegex(
105
++                InvalidURL, r"contain control.*\\r.*(found at least . .)"):
106
++                urllib.request.urlopen(f"http:{schemeless_url}")
107
++            with self.assertRaisesRegex(InvalidURL, r"contain control.*\\n"):
108
++                urllib.request.urlopen(f"https:{schemeless_url}")
109
++            # This code path quotes the URL so there is no injection.
110
++            resp = urlopen(f"http:{schemeless_url}")
111
++            self.assertNotIn(' ', resp.geturl())
112
++            self.assertNotIn('\r', resp.geturl())
113
++            self.assertNotIn('\n', resp.geturl())
114
++        finally:
115
++            self.unfakehttp()
116
++
117
+     def test_read_0_9(self):
118
+         # "0.9" response accepted (but not "simple responses" without
119
+         # a status line)
120
+diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
121
+index 32263f7f0b3b..0e002ec4ef9f 100644
122
+--- a/Lib/test/test_xmlrpc.py
123
+@@ -945,7 +945,12 @@ def test_unicode_host(self):
124
+     def test_partial_post(self):
125
+         # Check that a partial POST doesn't make the server loop: issue #14001.
126
+         conn = http.client.HTTPConnection(ADDR, PORT)
127
+-        conn.request('POST', '/RPC2 HTTP/1.0\r\nContent-Length: 100\r\n\r\nbye')
128
++        conn.send('POST /RPC2 HTTP/1.0\r\n'
129
++                  'Content-Length: 100\r\n\r\n'
130
++                  'bye HTTP/1.1\r\n'
131
++                  f'Host: {ADDR}:{PORT}\r\n'
132
++                  'Accept-Encoding: identity\r\n'
133
++                  'Content-Length: 0\r\n\r\n'.encode('ascii'))
134
+         conn.close()
135
+ 
136
+     def test_context_manager(self):
137
+diff --git a/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
138
+new file mode 100644
139
+index 000000000000..ed8027fb4d64
140
+--- /dev/null
141
+@@ -0,0 +1 @@
142
++Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request.  Such potentially malicious header injection URLs now cause an http.client.InvalidURL exception to be raised.
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:        A high-level scripting language
2 2
 Name:           python3
3 3
 Version:        3.7.0
4
-Release:        5%{?dist}
4
+Release:        6%{?dist}
5 5
 License:        PSF
6 6
 URL:            http://www.python.org/
7 7
 Group:          System Environment/Programming
... ...
@@ -14,6 +14,8 @@ Patch1:         python3-support-photon-platform.patch
14 14
 Patch2:         CVE-2018-14647.patch
15 15
 Patch3:         CVE-2018-20406.patch
16 16
 Patch4:         CVE-2019-9636.patch
17
+Patch5:         CVE-2019-5010.patch
18
+Patch6:         CVE-2019-9740.patch
17 19
 BuildRequires:  pkg-config >= 0.28
18 20
 BuildRequires:  bzip2-devel
19 21
 BuildRequires:  ncurses-devel
... ...
@@ -137,6 +139,8 @@ The test package contains all regression tests for Python as well as the modules
137 137
 %patch2 -p1
138 138
 %patch3 -p1
139 139
 %patch4 -p1
140
+%patch5 -p1
141
+%patch6 -p1
140 142
 
141 143
 %build
142 144
 export OPT="${CFLAGS}"
... ...
@@ -263,6 +267,9 @@ rm -rf %{buildroot}/*
263 263
 %{_libdir}/python3.7/test/*
264 264
 
265 265
 %changelog
266
+*   Thu May 23 2019 Tapas Kundu <tkundu@vmware.com> 3.7.0-6
267
+-   Fix for CVE-2019-5010
268
+-   Fix for CVE-2019-9740
266 269
 *   Tue Mar 12 2019 Tapas Kundu <tkundu@vmware.com> 3.7.0-5
267 270
 -   Fix for CVE-2019-9636
268 271
 *   Mon Feb 11 2019 Taps Kundu <tkundu@vmware.com> 3.7.0-4
... ...
@@ -1,14 +1,14 @@
1 1
 Summary:        Time zone data
2 2
 Name:           tzdata
3
-Version:        2017b
4
-Release:        3%{?dist}
3
+Version:        2019a
4
+Release:        1%{?dist}
5 5
 URL:            http://www.iana.org/time-zones
6 6
 License:        Public Domain
7 7
 Group:          Applications/System
8 8
 Vendor:         VMware, Inc.
9 9
 Distribution:   Photon
10 10
 Source0:        http://www.iana.org//time-zones/repository/releases/%{name}%{version}.tar.gz
11
-%define sha1    tzdata=0f13bbb641f5742796609d3484006fe01fa654f1
11
+%define sha1    tzdata=29cdb003e84a597a0253433401601e67865faa08
12 12
 BuildArch:      noarch
13 13
 
14 14
 %description
... ...
@@ -42,6 +42,8 @@ ln -svf %{_datarootdir}/zoneinfo/UTC %{buildroot}%{_sysconfdir}/localtime
42 42
 %{_datadir}/*
43 43
 
44 44
 %changelog
45
+*   Wed May 22 2019 Gerrit Photon <photon-checkins@vmware.com> 2019a-1
46
+-   Automatic Version Bump
45 47
 *   Thu Sep 06 2018 Anish Swaminathan <anishs@vmware.com> 2017b-3
46 48
 -   Add zone1970.tab to zoneinfo
47 49
 *   Mon May 01 2017 Bo Gan <ganb@vmware.com> 2017b-2
48 50
new file mode 100644
... ...
@@ -0,0 +1,65 @@
0
+From febbc583319b567fe3d83e521cc2ace9be8d1501 Mon Sep 17 00:00:00 2001
1
+From: Benjamin Lim <jarsp.ctf@gmail.com>
2
+Date: Fri, 29 Mar 2019 07:29:45 -0400
3
+Subject: [PATCH] Fix ext4 block group descriptor sizing
4
+
5
+Ext4 allows for arbitrarily sized block group descriptors when 64-bit
6
+addressing is enabled, which was previously not properly supported. This
7
+patch dynamically allocates a chunk of memory of the correct size.
8
+
9
+Signed-off-by: Benjamin Lim <jarsp.ctf@gmail.com>
10
+Signed-off-by Ajay Kaher <akaher@vmware.com?
11
+
12
+---
13
+ fs/ext4/ext4_common.c | 19 +++++++++++++++----
14
+ 1 file changed, 15 insertions(+), 4 deletions(-)
15
+
16
+diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
17
+index feffbfa..464c33d 100644
18
+--- a/fs/ext4/ext4_common.c
19
+@@ -1587,7 +1587,7 @@ static int ext4fs_blockgroup
20
+ 
21
+ int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
22
+ {
23
+-	struct ext2_block_group blkgrp;
24
++	struct ext2_block_group *blkgrp;
25
+ 	struct ext2_sblock *sblock = &data->sblock;
26
+ 	struct ext_filesystem *fs = get_fs();
27
+ 	int log2blksz = get_fs()->dev_desc->log2blksz;
28
+@@ -1595,17 +1595,28 @@ int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
29
+ 	long int blkno;
30
+ 	unsigned int blkoff;
31
+ 
32
++	/* Allocate blkgrp based on gdsize (for 64-bit support). */
33
++	blkgrp = zalloc(get_fs()->gdsize);
34
++	if (!blkgrp)
35
++		return 0;
36
++
37
+ 	/* It is easier to calculate if the first inode is 0. */
38
+ 	ino--;
39
+ 	status = ext4fs_blockgroup(data, ino / le32_to_cpu
40
+-				   (sblock->inodes_per_group), &blkgrp);
41
+-	if (status == 0)
42
++				   (sblock->inodes_per_group), blkgrp);
43
++	if (status == 0) {
44
++		free(blkgrp);
45
+ 		return 0;
46
++	}
47
+ 
48
+ 	inodes_per_block = EXT2_BLOCK_SIZE(data) / fs->inodesz;
49
+-	blkno = ext4fs_bg_get_inode_table_id(&blkgrp, fs) +
50
++	blkno = ext4fs_bg_get_inode_table_id(blkgrp, fs) +
51
+ 	    (ino % le32_to_cpu(sblock->inodes_per_group)) / inodes_per_block;
52
+ 	blkoff = (ino % inodes_per_block) * fs->inodesz;
53
++
54
++	/* Free blkgrp as it is no longer required. */
55
++	free(blkgrp);
56
++
57
+ 	/* Read the inode. */
58
+ 	status = ext4fs_devread((lbaint_t)blkno << (LOG2_BLOCK_SIZE(data) -
59
+ 				log2blksz), blkoff,
60
+-- 
61
+2.7.4
62
+
63
+
... ...
@@ -3,7 +3,7 @@
3 3
 Summary:        U-Boot EFI firmware
4 4
 Name:		u-boot
5 5
 Version:	2019.01
6
-Release:	1%{?dist}
6
+Release:	2%{?dist}
7 7
 License:	GPLv2
8 8
 Url:            http://www.denx.de/wiki/U-Boot
9 9
 Vendor:		VMware, Inc.
... ...
@@ -17,6 +17,10 @@ Patch1:		0004-Fix-MMC1-external-SD-slot-on-Samsun.patch
17 17
 Patch2:		0005-Fix-no-usb.patch
18 18
 Patch3:         add_tcp_wget_support.patch
19 19
 Patch4:         add-saveenv-in-bootcmd.patch
20
+
21
+# CVE-2019-11059
22
+Patch5:         0001-Fix_ext4_block_group_descriptor_sizing.patch
23
+
20 24
 Group:          Development/Tools
21 25
 BuildArch:      aarch64
22 26
 
... ...
@@ -37,6 +41,7 @@ env variables from linux shell prompt.
37 37
 %patch2 -p1
38 38
 %patch3 -p1
39 39
 %patch4 -p1
40
+%patch5 -p1
40 41
 
41 42
 %build
42 43
 cp %{SOURCE1} configs/
... ...
@@ -58,6 +63,8 @@ install -D -m 0644 %{SOURCE2} %{buildroot}/etc/fw_env.config
58 58
 /usr/bin/fw_setenv
59 59
 
60 60
 %changelog
61
+*   Wed May 15 2019 Ajay Kaher <akaher@vmware.com> 2019.01-2
62
+-   Fix CVE-2019-11059
61 63
 *   Fri Feb 22 2019 Tapas Kundu <tkundu@vmware.com> 2019.01-1
62 64
 -   Updating to 2019.01
63 65
 -   Added patch for tcp and wget support
... ...
@@ -2,6 +2,10 @@ FROM k8s-base-image:3.0
2 2
 
3 3
 MAINTAINER kulkarniv@vmware.com
4 4
 
5
+COPY [ "./stage-rpms-tdnf.conf", "./tmp/stage-rpms.repo", "/tmp/tdnf/" ]
6
+RUN tdnf -c /tmp/tdnf/stage-rpms-tdnf.conf erase -y toybox
7
+RUN tdnf -c /tmp/tdnf/stage-rpms-tdnf.conf install -y coreutils sed --refresh
8
+
5 9
 COPY [ "./tmp/calico/opt/cni/bin/calico", \
6 10
        "./tmp/calico/opt/cni/bin/calico-ipam", \
7 11
        "./tmp/calico/opt/cni/bin/portmap", \
... ...
@@ -16,8 +16,7 @@ COPY [ "./tmp/calico/usr/share/calico/docker/fs/sbin/restart-calico-confd", \
16 16
        "./tmp/calico/usr/share/calico/docker/fs/sbin/start_runit", \
17 17
        "./tmp/calico/usr/share/calico/docker/fs/sbin/versions", \
18 18
        "/usr/sbin/" ]
19
-COPY [ "./tmp/calico/usr/bin/allocate-ipip-addr", \
20
-       "./tmp/calico/usr/bin/startup", \
19
+COPY [ "./tmp/calico/usr/bin/calico-node", \
21 20
        "./tmp/calico/usr/bin/calico-bgp-daemon", \
22 21
        "./tmp/calico/usr/bin/gobgp", \
23 22
        "./tmp/calico/usr/bin/bird", \