pax_global_header00006660000000000000000000000064144002012550014503gustar00rootroot0000000000000052 comment=9679002a4392d8e7831d2dbda3fab41ccc5c6b8c python-uefivars-1.0.0/000077500000000000000000000000001440020125500146445ustar00rootroot00000000000000python-uefivars-1.0.0/.gitignore000066400000000000000000000002321440020125500166310ustar00rootroot00000000000000*~ *# *.swp *.DS_Store __pycache__/ *.py[cod] *$py.class *.egg-info/ /.coverage /.coverage.* /.cache /.pytest_cache /.mypy_cache /doc/_apidoc/ /build python-uefivars-1.0.0/LICENSE000066400000000000000000000021201440020125500156440ustar00rootroot00000000000000MIT License Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. python-uefivars-1.0.0/README.md000066400000000000000000000041671440020125500161330ustar00rootroot00000000000000# uefivars This is a set of Python modules and a helper application "uefivars" to introspect and modify UEFI variable stores. ## Why do I need this? UEFI variable stores are typically opaque to users. You access them using UEFI runtime services as function calls. However, the data is then stored in a binary data format. When running virtual machines or extracting UEFI variable stores directly from Flash storage, you can receive and write that binary data and thus modify variables directly. This is useful in situations where you have incorrect UEFI variable data and need to modify variables without runtime service access. It can also be useful to analyze and introspect the variable store and check what data is stored inside. ## How do I use it? You can convert a variable store into human readable format by setting the output type to json. This will show you all variables that are currently present in the variable store. ```console $ uefivars -i edk2 -o json -I OVMF_VARS.secboot.fd [ { "name": "SecureBootEnable", "data": "AQ==", "guid": "f0a30bc7-af08-4556-99c4-001009c93a44", "attr": 3 }, [...] ] ``` In addition, you can convert from the human readable json representation back into edk2 format: ```console $ uefivars -i json -o edk2 -I vars.json -O OVMF_VARS.fd ``` Given any variable store (including an empty one) the `--PK` , `--KEK` , `--db` and `--dbx` switches can be used to (over-)write the four SecureBoot variables from input files. (Usually .esl files). For a general rundown of the key generation process the [ArchLinux](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys) wiki has proven itself as a first point of guidance. You can also use the tool to convert between the AWS EC2 uefi-data format and edk2 to import and export UEFI variable stores between an EC2 instance and QEMU: ```console $ uefivars -i edk2 -o aws -I OVMF_VARS.fd -O uefi-data.aws ``` ```console $ uefivars -i aws -o edk2 -I uefi-data.aws -O OVMF_VARS.fd ``` ## What formats are supported? This package currently supports the aws, edk2 and json file formats. python-uefivars-1.0.0/pyuefivars/000077500000000000000000000000001440020125500170415ustar00rootroot00000000000000python-uefivars-1.0.0/pyuefivars/__init__.py000066400000000000000000000120551440020125500211550ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import argparse import sys from .varstore import * from .aws import AWSUEFIVarStore from .edk2 import EDK2UEFIVarStore from .json import JSONUEFIVarStore MIN_PYTHON = (3, 0) if sys.version_info < MIN_PYTHON: sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON) globalEfiGUID = bytes.fromhex("61 df e4 8b ca 93 d2 11 aa 0d 00 e0 98 03 2b 8c") secureDatabaseGUID = bytes.fromhex("cb b2 19 d7 3a 3d 96 45 a3 bc da d0 0e 67 65 6f") def Str2UEFIVarStore(s): if s == 'aws': return AWSUEFIVarStore elif s == 'edk2': return EDK2UEFIVarStore elif s == 'json': return JSONUEFIVarStore elif s == 'none': return UEFIVarStore else: raise SystemExit( 'Unknown Input type "{}", choose from ("aws, "json", "edk2", "none")'.format(s) ) def ReadVar(arg, name, guid): EFI_VARIABLE_NON_VOLATILE=0x00000001 EFI_VARIABLE_BOOTSERVICE_ACCESS=0x00000002 EFI_VARIABLE_RUNTIME_ACCESS=0x00000004 EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS=0x00000020 attr = EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS varfile = open(arg, "rb") vardata = varfile.read() if(len(vardata) == 0): print('Read empty variable "{}". Aborting'.format(name), file=sys.stderr) sys.exit() return UEFIVar(name, vardata, guid, attr) def _parser(): parser = argparse.ArgumentParser() parser.add_argument("-i", "--input", help='Input type ("aws", "json", "edk2", "none")', required=True) parser.add_argument("-o", "--output", help='Output type ("aws", "json", "edk2[,filesize=512]")', required=True) parser.add_argument("-I", "--inputfile", help='Input file (stdin if not given)') parser.add_argument("-O", "--outputfile", help='Output file (stdout if not given)') parser.add_argument("-P", "--PK", help='Insert PK from given file (usually PK.esl)') parser.add_argument("-K", "--KEK", help='Insert KEK from given file (usually KEK.esl)') parser.add_argument("-b", "--db", help='Insert db from given file (usually db.esl)') parser.add_argument("-x", "--dbx", help='Insert dbx from given file (usually dbx.esl)') args = parser.parse_args() return args def main(): pk_found = -1 kek_found = -1 db_found = -1 dbx_found = -1 args = _parser() inclass = Str2UEFIVarStore(args.input) args.output = [s.strip() for s in args.output.split(",")] output_options = args.output[1:] args.output = args.output[0] outclass = Str2UEFIVarStore(args.output) if args.input == 'none': indata = '' else: if args.inputfile: infile = open(args.inputfile, "rb") else: infile = sys.stdin.buffer print("Reading uefivars from stdin", file=sys.stderr) indata = infile.read() varstore = inclass(indata) print("Read {} variables".format(varstore.vars.__len__()), file=sys.stderr) for i, s in enumerate(varstore.vars): var = varstore.vars[i] if (var.name == 'PK' and var.guid == globalEfiGUID): pk_found = i if (var.name == 'KEK' and var.guid == globalEfiGUID): kek_found = i if (var.name == 'db' and var.guid == secureDatabaseGUID): db_found = i if (var.name == 'dbx' and var.guid == secureDatabaseGUID): dbx_found = i if (args.PK): var = ReadVar(args.PK, 'PK', globalEfiGUID) if (pk_found != -1): print('Replacing PK', file=sys.stderr) varstore.vars[pk_found] = var else: varstore.vars.append(var) elif (pk_found == -1): print('No PK (PlatformKey) was set; SecureBoot will not be enabled without a PK', file=sys.stderr) if (args.KEK): var = ReadVar(args.KEK, 'KEK', globalEfiGUID) if (kek_found != -1): print('Replacing KEK', file=sys.stderr) varstore.vars[kek_found] = var else: varstore.vars.append(var) if (args.db): var = ReadVar(args.db, 'db', secureDatabaseGUID) if (db_found != -1): print('Replacing db', file=sys.stderr) varstore.vars[db_found] = var else: varstore.vars.append(var) if (args.dbx): var = ReadVar(args.dbx, 'dbx', secureDatabaseGUID) if (dbx_found != -1): print('Replacing dbx', file=sys.stderr) varstore.vars[dbx_found] = var else: varstore.vars.append(var) # convert the format by changing the output class varstore.__class__ = outclass if output_options: varstore.set_output_options(output_options) if args.outputfile: outfile = open(args.outputfile, "wb") else: outfile = sys.stdout.buffer outfile.write(bytes(varstore)) print("Writen {} variables".format(varstore.vars.__len__()), file=sys.stderr) if __name__ == '__main__': main() python-uefivars-1.0.0/pyuefivars/aws.py000066400000000000000000000074021440020125500202100ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import json import os import zlib import base64 import tempfile import google_crc32c as crc32c from .varstore import * from .aws_v0 import * from .aws_file import * class AWSUEFIVarStore(UEFIVarStore): EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS = 0x20 AMZNUEFI = 0x494645554e5a4d41 def __init__(self, b64data: bytes): super().__init__() # Convert base64 to binary file = tempfile.SpooledTemporaryFile() file.write(base64.b64decode(b64data)) file.seek(0, os.SEEK_SET) # Then wrap the binary file with our reader and start parsing file = AWSVarStoreFile(file) magic = file.read64() if magic != self.AMZNUEFI: raise Exception("Invalid magic. Expected AMZNUEFI. Found 0x%x" % magic); crc32 = file.read32() # Validate crc32c location = file.file.tell() comp_crc32 = crc32c.value(file.readall()) if (comp_crc32 != crc32): raise Exception("Invalid checksum, please check you copied all data") file.file.seek(location, os.SEEK_SET) version = file.read32() if version != 0: raise Exception("Invalid version. Expected 0. Found 0x%x" % version); # Grab the zlib data that's embedded and parse it dec = zlib.decompressobj(0, zdict=UEFIVarStoreV0.dict) raw_data = dec.decompress(file.readall()) raw_file = tempfile.SpooledTemporaryFile() raw_file.write(raw_data) raw_file.seek(0, os.SEEK_SET) raw = AWSVarStoreFile(raw_file) nr_entries = raw.read64() for i in range(nr_entries): name = raw.readstr() data = raw.readdata() guid = raw.readguid() attr = raw.read32() if attr & self.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: timestamp = raw.readtimestamp() if timestamp == self.EMPTY_TIMESTAMP: timestamp = None digest = raw.readdata() if digest == self.EMPTY_DIGEST: digest = None self.vars.append(UEFIVar(name, data, guid, attr, timestamp, digest)) else: self.vars.append(UEFIVar(name, data, guid, attr)) def __bytes__(self) -> bytes: # Assemble the zlib compressed wrapped file raw = AWSVarStoreFile(tempfile.SpooledTemporaryFile()) raw.write64(len(self.vars)) for var in self.vars: raw.writestr(var.name) raw.writedata(var.data) raw.writeguid(var.guid) raw.write32(var.attr) if var.attr & self.EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS: timestamp = var.timestamp if timestamp == None: timestamp = self.EMPTY_TIMESTAMP digest = var.digest if digest == None: digest = self.EMPTY_DIGEST raw.writetimestamp(timestamp) raw.writedata(digest) raw.file.seek(0, os.SEEK_SET) enc = zlib.compressobj(9, zdict=UEFIVarStoreV0.dict) zdata = enc.compress(raw.file.read()) + enc.flush() # Create a full file with header + zdata f = tempfile.SpooledTemporaryFile() f = AWSVarStoreFile(f) f.write64(self.AMZNUEFI) f.write32(crc32c.value(int(0).to_bytes(4, byteorder='little') + zdata)) f.write32(0) # Version 0 f.write(zdata) f.file.seek(0, os.SEEK_SET) # Then write it out as base64 data return base64.b64encode(f.file.read()) def __str__(self) -> str: return self.__bytes__().decode('utf-8') python-uefivars-1.0.0/pyuefivars/aws_file.py000066400000000000000000000035021440020125500212040ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT class AWSVarStoreFile(object): def __init__(self, file): self.file = file def read(self, size): value = self.file.read(size) if len(value) != size: raise Exception("Unexpected end of %s at 0x%x" % (self.file, self.file.tell())) return value def read64(self): return int.from_bytes(self.read(8), byteorder='little', signed=False) def read32(self): return int.from_bytes(self.read(4), byteorder='little', signed=False) def read16(self): return int.from_bytes(self.read(2), byteorder='little', signed=False) def read8(self): return int.from_bytes(self.read(1), byteorder='little', signed=False) def readdata(self): size = self.read64() return self.read(size) def readstr(self): return self.readdata().decode('utf-8') def readguid(self): return self.read(16) def readtimestamp(self): return self.read(16) def readall(self): return self.file.read() def write(self, data): self.file.write(data) def write64(self, data): self.write(data.to_bytes(8, byteorder='little')) def write32(self, data): self.write(data.to_bytes(4, byteorder='little')) def write16(self, data): self.write(data.to_bytes(2, byteorder='little')) def write8(self, data): self.write(data.to_bytes(1, byteorder='little')) def writedata(self, data): self.write64(len(data)) self.write(data) def writestr(self, data): return self.writedata(data.encode('utf-8')) def writeguid(self, data): return self.write(data) def writetimestamp(self, data): return self.write(data) python-uefivars-1.0.0/pyuefivars/aws_v0.py000066400000000000000000002244271440020125500206250ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT class UEFIVarStoreV0(object): dict = bytes([ 0x37, 0xa4, 0x30, 0xec, 0x12, 0x44, 0xfc, 0x0a, 0x1d, 0x10, 0x28, 0x9d, 0x00, 0x00, 0x87, 0xae, 0xe3, 0x9e, 0xd0, 0x73, 0x2d, 0x2b, 0x4b, 0xca, 0x1e, 0xac, 0x1c, 0xfb, 0x79, 0xc8, 0x7c, 0x05, 0xfb, 0xf4, 0xf4, 0xf5, 0xf7, 0x01, 0x43, 0x05, 0x28, 0x00, 0x06, 0x03, 0x84, 0xe2, 0xd1, 0x60, 0x28, 0x4b, 0x06, 0x77, 0x00, 0x04, 0x80, 0xc0, 0x04, 0x0a, 0x1c, 0x0e, 0x06, 0x10, 0x08, 0x0a, 0x09, 0x05, 0x07, 0x34, 0x07, 0x04, 0x0a, 0x0f, 0x03, 0x07, 0x09, 0x0c, 0x07, 0x04, 0x05, 0x06, 0x08, 0x85, 0xc1, 0x60, 0x61, 0x68, 0x48, 0x20, 0x09, 0x07, 0x03, 0x71, 0xa1, 0x3c, 0xd5, 0x87, 0x98, 0x01, 0xd8, 0x00, 0x24, 0x51, 0x0f, 0x22, 0x11, 0x4c, 0x51, 0x0c, 0x02, 0x01, 0x00, 0x00, 0x82, 0x00, 0x21, 0xc8, 0xb8, 0x60, 0x68, 0x68, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x01, 0x03, 0x0d, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x87, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0xef, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49, 0xa0, 0xce, 0x65, 0x00, 0xfd, 0x9f, 0x1b, 0x95, 0x2c, 0xaf, 0x2c, 0x64, 0xfe, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x2e, 0x30, 0x2c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x25, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x50, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x4c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x67, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x50, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x74, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x4c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x6e, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x28, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x28, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x21, 0xe5, 0x7f, 0x93, 0xae, 0x95, 0x1a, 0x4d, 0x89, 0x29, 0x48, 0xbc, 0xd9, 0x0a, 0xd3, 0x1a, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0xe8, 0x7f, 0xb3, 0x04, 0xae, 0xf6, 0x0b, 0x48, 0xbd, 0xd5, 0x37, 0xd9, 0x8c, 0x5e, 0x89, 0xaa, 0x56, 0x00, 0x61, 0x00, 0x72, 0x00, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x46, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x88, 0x9c, 0xd0, 0xf7, 0xb6, 0xc4, 0x7a, 0xd5, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x65, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x6e, 0xe5, 0xbe, 0xd9, 0xdc, 0x75, 0xd9, 0x49, 0xb4, 0xd7, 0xb5, 0x34, 0x21, 0x0f, 0x63, 0x7a, 0x63, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x23, 0x00, 0x00, 0x04, 0x01, 0x2a, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xbc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xbd, 0x26, 0x17, 0x0a, 0xae, 0xeb, 0x11, 0xaf, 0xcc, 0xb2, 0x6f, 0x04, 0x02, 0x45, 0xc6, 0x02, 0x28, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x12, 0x34, 0x56, 0xff, 0xff, 0xaa, 0x55, 0x50, 0x00, 0x58, 0x00, 0x45, 0x00, 0x76, 0x00, 0x43, 0x00, 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x77, 0x00, 0x73, 0x00, 0x11, 0xd4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x02, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x06, 0x0b, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x3d, 0x03, 0x0e, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x11, 0xd4, 0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x00, 0x50, 0x00, 0x6f, 0x00, 0x6c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x79, 0x00, 0x2d, 0x88, 0x11, 0xd3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x00, 0xaf, 0xaf, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6f, 0x22, 0xec, 0xea, 0xa3, 0xc9, 0x7a, 0x47, 0xa8, 0x26, 0xdd, 0xc7, 0x16, 0xcd, 0xc0, 0xe3, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x6f, 0x22, 0xec, 0xea, 0xa3, 0xc9, 0x7a, 0x47, 0xa8, 0x26, 0xdd, 0xc7, 0x16, 0xcd, 0xc0, 0xe3, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x11, 0xd2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b, 0xbd, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x03, 0x18, 0x04, 0x00, 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0x00, 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x30, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x80, 0xb4, 0xd9, 0x69, 0x31, 0xbf, 0x0d, 0x02, 0xfd, 0x91, 0xa6, 0x1e, 0x19, 0xd1, 0x4f, 0x1d, 0xa4, 0x52, 0xe6, 0x6d, 0xb2, 0x40, 0x8c, 0xa8, 0x60, 0x4d, 0x41, 0x1f, 0x92, 0x65, 0x9f, 0x0a, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0x07, 0x00, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x17, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x6b, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x2a, 0x30, 0x28, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x21, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x4b, 0x45, 0x4b, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0xf3, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x4b, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x5f, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0x0e, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x4b, 0x00, 0x65, 0x00, 0x79, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x51, 0xd7, 0x97, 0x9f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x76, 0x00, 0x34, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x43, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x03, 0x0b, 0x25, 0x00, 0x52, 0x54, 0x00, 0x12, 0x34, 0x56, 0x00, 0x00, 0x53, 0x00, 0x69, 0x00, 0x53, 0x00, 0x74, 0x00, 0x61, 0x00, 0x74, 0x00, 0x75, 0x00, 0x73, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x4b, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x5f, 0x00, 0x50, 0x00, 0x4b, 0x00, 0x00, 0x00, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0xd0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x03, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x30, 0x82, 0x03, 0xa0, 0x30, 0x82, 0x02, 0x88, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xfe, 0xf5, 0x88, 0xe8, 0xf3, 0x96, 0xc0, 0xf1, 0x30, 0x0d, 0x06, 0xb9, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7a, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x37, 0x32, 0x31, 0x32, 0x32, 0x34, 0x35, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 0x37, 0x32, 0x31, 0x33, 0x32, 0x34, 0x35, 0x5a, 0x30, 0x81, 0x81, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x00, 0x76, 0x00, 0x36, 0x00, 0x20, 0x00, 0x28, 0x00, 0x4d, 0x00, 0x41, 0x00, 0x43, 0x00, 0x3a, 0x00, 0x35, 0x00, 0x32, 0x00, 0x35, 0x00, 0x34, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x02, 0x03, 0x0b, 0x25, 0x32, 0x30, 0x30, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x29, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x20, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x32, 0x30, 0x31, 0x30, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x31, 0x30, 0x31, 0x39, 0x31, 0x38, 0x34, 0x31, 0x34, 0x32, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x31, 0x30, 0x31, 0x39, 0x31, 0x38, 0x35, 0x31, 0x34, 0x32, 0x5a, 0x30, 0x81, 0x84, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x14, 0xfc, 0x7c, 0x71, 0x51, 0xa5, 0x79, 0xc2, 0x6e, 0xb2, 0xef, 0x39, 0x3e, 0xbc, 0x3c, 0x52, 0x0f, 0x6e, 0x2b, 0x3f, 0x10, 0x13, 0x73, 0xfe, 0xa8, 0x68, 0xd0, 0x48, 0xa6, 0x34, 0x4d, 0x8a, 0x96, 0x05, 0x26, 0xee, 0x31, 0x46, 0x90, 0x61, 0x79, 0xd6, 0x7f, 0xff, 0x04, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0xc3, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x14, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xec, 0x76, 0xc0, 0x28, 0x70, 0x99, 0x43, 0xa0, 0x72, 0x71, 0xee, 0x5c, 0x44, 0x8b, 0x9f, 0x43, 0x00, 0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x65, 0x00, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x9f, 0x04, 0x19, 0x4c, 0x37, 0x41, 0xd3, 0x4d, 0x9c, 0x10, 0x8b, 0x97, 0xa8, 0x3f, 0xfd, 0xfa, 0x4d, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x79, 0x00, 0x54, 0x00, 0x79, 0x00, 0x70, 0x00, 0x65, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0xd5, 0xf6, 0x56, 0xcb, 0x8f, 0xe8, 0xa2, 0x5c, 0x62, 0x68, 0xd1, 0x3d, 0x94, 0x90, 0x5b, 0xd7, 0xce, 0x9a, 0x18, 0xc4, 0x30, 0x56, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x4f, 0x30, 0x4d, 0x30, 0x4b, 0xa0, 0x49, 0xa0, 0x47, 0x86, 0x45, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x52, 0x6f, 0x6f, 0x43, 0x65, 0x72, 0x41, 0x75, 0x74, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x30, 0x36, 0x2d, 0x32, 0x33, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x5a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x4e, 0x30, 0x4c, 0x30, 0x4a, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x3e, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x0c, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x03, 0x0f, 0x0b, 0x00, 0xff, 0xff, 0xff, 0xff, 0x03, 0x01, 0x01, 0x7f, 0x01, 0x04, 0x00, 0x01, 0x04, 0x14, 0x00, 0x9b, 0x5a, 0x5a, 0x86, 0x5d, 0xb8, 0x4c, 0x47, 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0x8d, 0x2b, 0xf1, 0xff, 0x96, 0x76, 0x8b, 0x4c, 0xa9, 0x85, 0x27, 0x47, 0x07, 0x5b, 0x4f, 0x50, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00, 0x48, 0x00, 0x19, 0xf9, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43, 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92, 0xb8, 0xdf, 0x00, 0x00, 0x5a, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0xec, 0x76, 0xc0, 0x28, 0x70, 0x99, 0x43, 0xa0, 0x72, 0x71, 0xee, 0x5c, 0x44, 0x8b, 0x9f, 0xf1, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe0, 0xe4, 0x73, 0x90, 0xec, 0x60, 0x6e, 0x4b, 0x99, 0x03, 0x4c, 0x22, 0x3c, 0x26, 0x0f, 0x3c, 0x56, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x79, 0x00, 0x73, 0x00, 0x4e, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x0b, 0xa3, 0xf0, 0x08, 0xaf, 0x56, 0x45, 0x99, 0xc4, 0x00, 0x10, 0x09, 0xc9, 0x3a, 0x44, 0x53, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, 0x00, 0x65, 0x00, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x45, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x62, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0xcb, 0xb2, 0x19, 0xd7, 0x3a, 0x3d, 0x96, 0x45, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f, 0x64, 0x00, 0x62, 0x00, 0x78, 0x00, 0x00, 0x00, 0x26, 0x16, 0xc4, 0xc1, 0x4c, 0x50, 0x92, 0x40, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xa3, 0xa8, 0xba, 0xa0, 0x1d, 0x04, 0xa8, 0x48, 0xbc, 0x87, 0xc3, 0x6d, 0x12, 0x1b, 0x5e, 0x3d, 0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55, 0x26, 0x16, 0xc4, 0xc1, 0x4c, 0x50, 0x92, 0x40, 0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x11, 0x40, 0x70, 0xeb, 0x02, 0x14, 0xd3, 0x11, 0x8e, 0x77, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b, 0x4d, 0x00, 0x54, 0x00, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x45, 0x49, 0x32, 0x59, 0x44, 0xec, 0x0d, 0x4c, 0xb1, 0xcd, 0x9d, 0xb1, 0x39, 0xdf, 0x07, 0x0c, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x20, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x20, 0x31, 0x00, 0xf5, 0x2f, 0x83, 0xa3, 0xfa, 0x9c, 0xfb, 0xd6, 0x92, 0x0f, 0x72, 0x28, 0x24, 0xdb, 0xe4, 0x03, 0x45, 0x34, 0xd2, 0x5b, 0x85, 0x07, 0x24, 0x6b, 0x3b, 0x95, 0x7d, 0xac, 0x6e, 0x1b, 0xce, 0x7a, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc5, 0xd9, 0xd8, 0xa1, 0x86, 0xe2, 0xc8, 0x2d, 0x09, 0xaf, 0xaa, 0x2a, 0x6f, 0x7f, 0x2e, 0x73, 0x87, 0x0d, 0x3e, 0x64, 0xf7, 0x2c, 0x4e, 0x08, 0xef, 0x67, 0x79, 0x6a, 0x84, 0x0f, 0x0f, 0xbd, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x1a, 0xec, 0x84, 0xb8, 0x4b, 0x6c, 0x65, 0xa5, 0x12, 0x20, 0xa9, 0xbe, 0x71, 0x81, 0x96, 0x52, 0x30, 0x21, 0x0d, 0x62, 0xd6, 0xd3, 0x3c, 0x48, 0x99, 0x9c, 0x6b, 0x29, 0x5a, 0x2b, 0x0a, 0x06, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc3, 0xa9, 0x9a, 0x46, 0x0d, 0xa4, 0x64, 0xa0, 0x57, 0xc3, 0x58, 0x6d, 0x83, 0xce, 0xf5, 0xf4, 0xae, 0x08, 0xb7, 0x10, 0x39, 0x79, 0xed, 0x89, 0x32, 0x74, 0x2d, 0xf0, 0xed, 0x53, 0x0c, 0x66, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x58, 0xfb, 0x94, 0x1a, 0xef, 0x95, 0xa2, 0x59, 0x43, 0xb3, 0xfb, 0x5f, 0x25, 0x10, 0xa0, 0xdf, 0x3f, 0xe4, 0x4c, 0x58, 0xc9, 0x5e, 0x0a, 0xb8, 0x04, 0x87, 0x29, 0x75, 0x68, 0xab, 0x97, 0x71, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x53, 0x91, 0xc3, 0xa2, 0xfb, 0x11, 0x21, 0x02, 0xa6, 0xaa, 0x1e, 0xdc, 0x25, 0xae, 0x77, 0xe1, 0x9f, 0x5d, 0x6f, 0x09, 0xcd, 0x09, 0xee, 0xb2, 0x50, 0x99, 0x22, 0xbf, 0xcd, 0x59, 0x92, 0xea, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xd6, 0x26, 0x15, 0x7e, 0x1d, 0x6a, 0x71, 0x8b, 0xc1, 0x24, 0xab, 0x8d, 0xa2, 0x7c, 0xbb, 0x65, 0x07, 0x2c, 0xa0, 0x3a, 0x7b, 0x6b, 0x25, 0x7d, 0xbd, 0xcb, 0xbd, 0x60, 0xf6, 0x5e, 0xf3, 0xd1, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0xff, 0x04, 0x00, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0xff, 0x04, 0x00, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x28, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0xd6, 0x47, 0x4b, 0xd6, 0xa8, 0x52, 0x45, 0x9d, 0x44, 0xcc, 0xad, 0x2e, 0x0f, 0x4c, 0xf9, 0x49, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x41, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xaa, 0x55, 0x3f, 0x00, 0x03, 0x00, 0xdd, 0x0c, 0xbb, 0xa2, 0xe4, 0x2e, 0x09, 0xe3, 0xe7, 0xc5, 0xf7, 0x96, 0x69, 0xbc, 0x00, 0x21, 0xbd, 0x69, 0x33, 0x33, 0xef, 0xad, 0x04, 0xcb, 0x54, 0x80, 0xee, 0x06, 0x83, 0xbb, 0xc5, 0x20, 0x84, 0xd9, 0xf7, 0xd2, 0x8b, 0xf3, 0x38, 0xb0, 0xab, 0xa4, 0xad, 0x2d, 0x7c, 0x62, 0x79, 0x05, 0xff, 0xe3, 0x4a, 0x3f, 0x04, 0x35, 0x20, 0x70, 0xe3, 0xc4, 0xe7, 0x6b, 0xe0, 0x9c, 0xc0, 0x36, 0x75, 0xe9, 0x8a, 0x31, 0xdd, 0x8d, 0x70, 0xe5, 0xdc, 0x37, 0xb5, 0x74, 0x46, 0x96, 0x28, 0x5b, 0x87, 0x60, 0x23, 0x2c, 0xbf, 0xdc, 0x47, 0xa5, 0x67, 0xf7, 0x51, 0x27, 0x9e, 0x72, 0xeb, 0x07, 0xa6, 0xc9, 0xb9, 0x1e, 0x3b, 0x53, 0x35, 0x7c, 0xe5, 0xd3, 0xec, 0x27, 0xb9, 0x87, 0x1c, 0xfe, 0xb9, 0xc9, 0x23, 0x09, 0x6f, 0xa8, 0x46, 0x91, 0xc1, 0x6e, 0x96, 0x3c, 0x41, 0xd3, 0xcb, 0xa3, 0x3f, 0x5d, 0x02, 0x6a, 0x4d, 0xec, 0x69, 0x1f, 0x25, 0x28, 0x5c, 0x36, 0xff, 0xfd, 0x43, 0x15, 0x0a, 0x94, 0xe0, 0x19, 0xb4, 0xcf, 0xdf, 0xc2, 0x12, 0xe2, 0xc2, 0x5b, 0x27, 0xee, 0x27, 0x78, 0x30, 0x8b, 0x5b, 0x2a, 0x09, 0x6b, 0x22, 0x89, 0x53, 0x60, 0x16, 0x2c, 0xc0, 0x68, 0x1d, 0x53, 0xba, 0xec, 0x49, 0xf3, 0x9d, 0x61, 0x8c, 0x85, 0x68, 0x09, 0x73, 0x44, 0x5d, 0x7d, 0xa2, 0x54, 0x2b, 0xdd, 0x79, 0xf7, 0x15, 0xcf, 0x35, 0x5d, 0x6c, 0x1c, 0x2b, 0x5c, 0xce, 0xbc, 0x9c, 0x23, 0x8b, 0x6f, 0x6e, 0xb5, 0x26, 0xd9, 0x36, 0x13, 0xc3, 0x4f, 0xd6, 0x27, 0xae, 0xb9, 0x32, 0x3b, 0x41, 0x92, 0x2c, 0xe1, 0xc7, 0xcd, 0x77, 0xe8, 0xaa, 0x54, 0x4e, 0xf7, 0x5c, 0x0b, 0x04, 0x87, 0x65, 0xb4, 0x43, 0x18, 0xa8, 0xb2, 0xe0, 0x6d, 0x19, 0x77, 0xec, 0x5a, 0x24, 0xfa, 0x48, 0x03, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x43, 0x30, 0x82, 0x01, 0x3f, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa9, 0x29, 0x02, 0x39, 0x8e, 0x16, 0xc4, 0x97, 0x78, 0xcd, 0x90, 0xf9, 0x9e, 0x4f, 0x9a, 0xe1, 0x7c, 0x55, 0xaf, 0x53, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0xc4, 0xe8, 0xb5, 0x8a, 0xbf, 0xad, 0x57, 0x26, 0xb0, 0x26, 0xc3, 0xea, 0xe7, 0xfb, 0x57, 0x7a, 0x44, 0x02, 0x5d, 0x07, 0x0d, 0xda, 0x4a, 0xe5, 0x74, 0x2a, 0xe6, 0xb0, 0x0f, 0xec, 0x6d, 0xeb, 0xec, 0x7f, 0xb9, 0xe3, 0x5a, 0x63, 0x32, 0x7c, 0x11, 0x17, 0x4f, 0x0e, 0xe3, 0x0b, 0xa7, 0x38, 0x15, 0x93, 0x8e, 0xc6, 0xf5, 0xe0, 0x84, 0xb1, 0x9a, 0x9b, 0x2c, 0xe7, 0xf5, 0xb7, 0x91, 0xd6, 0x09, 0xe1, 0xe2, 0xc0, 0x04, 0xa8, 0xac, 0x30, 0x1c, 0xdf, 0x48, 0xf3, 0x06, 0x50, 0x9a, 0x64, 0xa7, 0x51, 0x7f, 0xc8, 0x85, 0x4f, 0x8f, 0x20, 0x86, 0xce, 0xfe, 0x2f, 0xe1, 0x9f, 0xff, 0x82, 0xc0, 0xed, 0xe9, 0xcd, 0xce, 0xf4, 0x53, 0x6a, 0x62, 0x3a, 0x0b, 0x43, 0xb9, 0xe2, 0x25, 0xfd, 0xfe, 0x05, 0xf9, 0xd4, 0xc4, 0x14, 0xab, 0x11, 0xe2, 0x23, 0x89, 0x8d, 0x70, 0xb7, 0xa4, 0x1d, 0x4d, 0xec, 0xae, 0xe5, 0x9c, 0xfa, 0x16, 0xc2, 0xd7, 0xc1, 0xcb, 0xd4, 0xe8, 0xc4, 0x2f, 0xe5, 0x99, 0xee, 0x24, 0x8b, 0x03, 0xec, 0x8d, 0xf2, 0x8b, 0xea, 0xc3, 0x4a, 0xfb, 0x43, 0x11, 0x12, 0x0b, 0x7e, 0xb5, 0x47, 0x92, 0x6c, 0xdc, 0xe6, 0x04, 0x89, 0xeb, 0xf5, 0x33, 0x04, 0xeb, 0x10, 0x01, 0x2a, 0x71, 0xe5, 0xf9, 0x83, 0x13, 0x3c, 0xff, 0x25, 0x09, 0x2f, 0x68, 0x76, 0x46, 0xff, 0xba, 0x4f, 0xbe, 0xdc, 0xad, 0x71, 0x2a, 0x58, 0xaa, 0xfb, 0x0e, 0xd2, 0x79, 0x3d, 0xe4, 0x9b, 0x65, 0x3b, 0xcc, 0x29, 0x2a, 0x9f, 0xfc, 0x72, 0x59, 0xa2, 0xeb, 0xae, 0x92, 0xef, 0xf6, 0x35, 0x13, 0x80, 0xc6, 0x02, 0xec, 0xe4, 0x5f, 0xcc, 0x9d, 0x76, 0xcd, 0xef, 0x63, 0x92, 0xc1, 0xaf, 0x79, 0x40, 0x84, 0x79, 0x87, 0x7f, 0xe3, 0x52, 0xa8, 0xe8, 0x9d, 0x7b, 0x07, 0x69, 0x8f, 0x15, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x4f, 0x30, 0x82, 0x01, 0x4b, 0x30, 0x10, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x03, 0x02, 0x01, 0x00, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x62, 0xfc, 0x43, 0xcd, 0xa0, 0x3e, 0xa4, 0xcb, 0x67, 0x12, 0xd2, 0x5b, 0xd9, 0x55, 0xac, 0x7b, 0xcc, 0xb6, 0x8a, 0x5f, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0xff, 0x04, 0x00, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x35, 0x08, 0x42, 0xff, 0x30, 0xcc, 0xce, 0xf7, 0x76, 0x0c, 0xad, 0x10, 0x68, 0x58, 0x35, 0x29, 0x46, 0x32, 0x76, 0x27, 0x7c, 0xef, 0x12, 0x41, 0x27, 0x42, 0x1b, 0x4a, 0xaa, 0x6d, 0x81, 0x38, 0x48, 0x59, 0x13, 0x55, 0xf3, 0xe9, 0x58, 0x34, 0xa6, 0x16, 0x0b, 0x82, 0xaa, 0x5d, 0xad, 0x82, 0xda, 0x80, 0x83, 0x41, 0x06, 0x8f, 0xb4, 0x1d, 0xf2, 0x03, 0xb9, 0xf3, 0x1a, 0x5d, 0x1b, 0xf1, 0x50, 0x90, 0xf9, 0xb3, 0x55, 0x84, 0x42, 0x28, 0x1c, 0x20, 0xbd, 0xb2, 0xae, 0x51, 0x14, 0xc5, 0xc0, 0xac, 0x97, 0x95, 0x21, 0x1c, 0x90, 0xdb, 0x0f, 0xfc, 0x77, 0x9e, 0x95, 0x73, 0x91, 0x88, 0xca, 0xbd, 0xbd, 0x52, 0xb9, 0x05, 0x50, 0x0d, 0xdf, 0x57, 0x9e, 0xa0, 0x61, 0xed, 0x0d, 0xe5, 0x6d, 0x25, 0xd9, 0x40, 0x0f, 0x17, 0x40, 0xc8, 0xce, 0xa3, 0x4a, 0xc2, 0x4d, 0xaf, 0x9a, 0x12, 0x1d, 0x08, 0x54, 0x8f, 0xbd, 0xc7, 0xbc, 0xb9, 0x2b, 0x3d, 0x49, 0x2b, 0x1f, 0x32, 0xfc, 0x6a, 0x21, 0x69, 0x4f, 0x9b, 0xc8, 0x7e, 0x42, 0x34, 0xfc, 0x36, 0x06, 0x17, 0x8b, 0x8f, 0x20, 0x40, 0xc0, 0xb3, 0x9a, 0x25, 0x75, 0x27, 0xcd, 0xc9, 0x03, 0xa3, 0xf6, 0x5d, 0xd1, 0xe7, 0x36, 0x54, 0x7a, 0xb9, 0x50, 0xb5, 0xd3, 0x12, 0xd1, 0x07, 0xbf, 0xbb, 0x74, 0xdf, 0xdc, 0x1e, 0x8f, 0x80, 0xd5, 0xed, 0x18, 0xf4, 0x2f, 0x14, 0x16, 0x6b, 0x2f, 0xde, 0x66, 0x8c, 0xb0, 0x23, 0xe5, 0xc7, 0x84, 0xd8, 0xed, 0xea, 0xc1, 0x33, 0x82, 0xad, 0x56, 0x4b, 0x18, 0x2d, 0xf1, 0x68, 0x95, 0x07, 0xcd, 0xcf, 0xf0, 0x72, 0xf0, 0xae, 0xbb, 0xdd, 0x86, 0x85, 0x98, 0x2c, 0x21, 0x4c, 0x33, 0x2b, 0xf0, 0x0f, 0x4a, 0xf0, 0x68, 0x87, 0xb5, 0x92, 0x55, 0x32, 0x75, 0xa1, 0x6a, 0x82, 0x6a, 0x3c, 0xa3, 0x25, 0x11, 0xa4, 0xed, 0xad, 0xd7, 0x04, 0xae, 0xcb, 0xd8, 0x40, 0x59, 0xa0, 0x84, 0xd1, 0x95, 0x4c, 0x62, 0x91, 0x22, 0x1a, 0x74, 0x1d, 0x8c, 0x3d, 0x47, 0x0e, 0x44, 0xa6, 0xe4, 0xb0, 0x9b, 0x34, 0x35, 0xb1, 0xfa, 0xb6, 0x53, 0xa8, 0x2c, 0x81, 0xec, 0xa4, 0x05, 0x71, 0xc8, 0x9d, 0xb8, 0xba, 0xe8, 0x1b, 0x44, 0x66, 0xe4, 0x47, 0x54, 0x0e, 0x8e, 0x56, 0x7f, 0xb3, 0x9f, 0x16, 0x98, 0xb2, 0x86, 0xd0, 0x68, 0x3e, 0x90, 0x23, 0xb5, 0x2f, 0x5e, 0x8f, 0x50, 0x85, 0x8d, 0xc6, 0x8d, 0x82, 0x5f, 0x41, 0xa1, 0xf4, 0x2e, 0x0d, 0xe0, 0x99, 0xd2, 0x6c, 0x75, 0xe4, 0xb6, 0x69, 0xb5, 0x21, 0x86, 0xfa, 0x07, 0xd1, 0xf6, 0xe2, 0x4d, 0xd1, 0xda, 0xad, 0x2c, 0x77, 0x53, 0x1e, 0x25, 0x32, 0x37, 0xc7, 0x6c, 0x52, 0x72, 0x95, 0x86, 0xb0, 0xf1, 0x35, 0x61, 0x6a, 0x19, 0xf5, 0xb2, 0x3b, 0x81, 0x50, 0x56, 0xa6, 0x32, 0x2d, 0xfe, 0xa2, 0x89, 0xf9, 0x42, 0x86, 0x27, 0x18, 0x55, 0xa1, 0x82, 0xca, 0x5a, 0x9b, 0xf8, 0x30, 0x98, 0x54, 0x14, 0xa6, 0x47, 0x96, 0x25, 0x2f, 0xc8, 0x26, 0xe4, 0x41, 0x94, 0x1a, 0x5c, 0x02, 0x3f, 0xe5, 0x96, 0xe3, 0x85, 0x5b, 0x3c, 0x3e, 0x3f, 0xbb, 0x47, 0x16, 0x72, 0x55, 0xe2, 0x25, 0x22, 0xb1, 0xd9, 0x7b, 0xe7, 0x03, 0x06, 0x2a, 0xa3, 0xf7, 0x1e, 0x90, 0x46, 0xc3, 0x00, 0x0d, 0xd6, 0x19, 0x89, 0xe3, 0x0e, 0x35, 0x27, 0x62, 0x03, 0x71, 0x15, 0xa6, 0xef, 0xd0, 0x27, 0xa0, 0xa0, 0x59, 0x37, 0x60, 0xf8, 0x38, 0x94, 0xb8, 0xe0, 0x78, 0x70, 0xf8, 0xba, 0x4c, 0x86, 0x87, 0x94, 0xf6, 0xe0, 0xae, 0x02, 0x45, 0xee, 0x65, 0xc2, 0xb6, 0xa3, 0x7e, 0x69, 0x16, 0x75, 0x07, 0x92, 0x9b, 0xf5, 0xa6, 0xbc, 0x59, 0x83, 0x58, 0xff, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x02, 0x09, 0x00, 0xfe, 0xf5, 0x88, 0xe8, 0xf3, 0x96, 0xc0, 0xf1, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x51, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x52, 0x65, 0x64, 0x20, 0x48, 0x61, 0x74, 0x20, 0x53, 0x65, 0x63, 0x75, 0x72, 0x65, 0x20, 0x42, 0x6f, 0x6f, 0x74, 0x20, 0x28, 0x50, 0x4b, 0x2f, 0x4b, 0x45, 0x4b, 0x20, 0x6b, 0x65, 0x79, 0x20, 0x31, 0x29, 0x31, 0x22, 0x30, 0x20, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x13, 0x73, 0x65, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x74, 0x40, 0x72, 0x65, 0x64, 0x68, 0x61, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x31, 0x30, 0x33, 0x31, 0x31, 0x31, 0x31, 0x35, 0x33, 0x37, 0x5a, 0x17, 0x0d, 0x33, 0x37, 0x31, 0x30, 0x32, 0x35, 0x31, 0x31, 0x31, 0x35, 0x33, 0x37, 0x5a, 0x30, 0x51, 0x31, 0x2b, 0x30, 0x29, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x22, 0x52, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x55, 0x00, 0x69, 0x00, 0x41, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0xd4, 0x84, 0x88, 0xf5, 0x14, 0x94, 0x18, 0x02, 0xca, 0x2a, 0x3c, 0xfb, 0x2a, 0x92, 0x1c, 0x0c, 0xd7, 0xa0, 0xd1, 0xf1, 0xe8, 0x52, 0x66, 0xa8, 0xee, 0xa2, 0xb5, 0x75, 0x7a, 0x90, 0x00, 0xaa, 0x2d, 0xa4, 0x76, 0x5a, 0xea, 0x79, 0xb7, 0xb9, 0x37, 0x6a, 0x51, 0x7b, 0x10, 0x64, 0xf6, 0xe1, 0x64, 0xf2, 0x02, 0x67, 0xbe, 0xf7, 0xa8, 0x1b, 0x78, 0xbd, 0xba, 0xce, 0x88, 0x58, 0x64, 0x0c, 0xd6, 0x57, 0xc8, 0x19, 0xa3, 0x5f, 0x05, 0xd6, 0xdb, 0xc6, 0xd0, 0x69, 0xce, 0x48, 0x4b, 0x32, 0xb7, 0xeb, 0x5d, 0xd2, 0x30, 0xf5, 0xc0, 0xf5, 0xb8, 0xba, 0x78, 0x07, 0xa3, 0x2b, 0xfe, 0x9b, 0xdb, 0x34, 0x56, 0x84, 0xec, 0x82, 0xca, 0xae, 0x41, 0x25, 0x70, 0x9c, 0x6b, 0xe9, 0xfe, 0x90, 0x0f, 0xd7, 0x96, 0x1f, 0xe5, 0xe7, 0x94, 0x1f, 0xb2, 0x2a, 0x0c, 0x8d, 0x4b, 0xff, 0x28, 0x29, 0x10, 0x7b, 0xf7, 0xd7, 0x7c, 0xa5, 0xd1, 0x76, 0xb9, 0x05, 0xc8, 0x79, 0xed, 0x0f, 0x90, 0x92, 0x9c, 0xc2, 0xfe, 0xdf, 0x6f, 0x7e, 0x6c, 0x0f, 0x7b, 0xd4, 0xc1, 0x45, 0xdd, 0x34, 0x51, 0x96, 0x39, 0x0f, 0xe5, 0x5e, 0x56, 0xd8, 0x18, 0x05, 0x96, 0xf4, 0x07, 0xa6, 0x42, 0xb3, 0xa0, 0x77, 0xfd, 0x08, 0x19, 0xf2, 0x71, 0x56, 0xcc, 0x9f, 0x86, 0x23, 0xa4, 0x87, 0xcb, 0xa6, 0xfd, 0x58, 0x7e, 0xd4, 0x69, 0x67, 0x15, 0x91, 0x7e, 0x81, 0xf2, 0x7f, 0x13, 0xe5, 0x0d, 0x8b, 0x8a, 0x3c, 0x87, 0x84, 0xeb, 0xe3, 0xce, 0xbd, 0x43, 0xe5, 0xad, 0x2d, 0x84, 0x93, 0x8e, 0x6a, 0x2b, 0x5a, 0x7c, 0x44, 0xfa, 0x52, 0xaa, 0x81, 0xc8, 0x2d, 0x1c, 0xbb, 0xe0, 0x52, 0xdf, 0x00, 0x11, 0xf8, 0x9a, 0x3d, 0xc1, 0x60, 0xb0, 0xe1, 0x33, 0xb5, 0xa3, 0x88, 0xd1, 0x65, 0x19, 0x0a, 0x1a, 0xe7, 0xac, 0x7c, 0xa4, 0xc1, 0x82, 0x87, 0x4e, 0x38, 0xb1, 0x2f, 0x0d, 0xc5, 0x14, 0x87, 0x6f, 0xfd, 0x8d, 0x2e, 0xbc, 0x39, 0xb6, 0xe7, 0xe6, 0xc3, 0xe0, 0xe4, 0xcd, 0x27, 0x84, 0xef, 0x94, 0x42, 0xef, 0x29, 0x8b, 0x90, 0x46, 0x41, 0x3b, 0x81, 0x1b, 0x67, 0xd8, 0xf9, 0x43, 0x59, 0x65, 0xcb, 0x0d, 0xbc, 0xfd, 0x00, 0x92, 0x4f, 0xf4, 0x75, 0x3b, 0xa7, 0xa9, 0x24, 0xfc, 0x50, 0x41, 0x40, 0x79, 0xe0, 0x2d, 0x4f, 0x0a, 0x6a, 0x27, 0x76, 0x6e, 0x52, 0xed, 0x96, 0x69, 0x7b, 0xaf, 0x0f, 0xf7, 0x87, 0x05, 0xd0, 0x45, 0xc2, 0xad, 0x53, 0x14, 0x81, 0x1f, 0xfb, 0x30, 0x04, 0xaa, 0x37, 0x36, 0x61, 0xda, 0x4a, 0x69, 0x1b, 0x34, 0xd8, 0x68, 0xed, 0xd6, 0x02, 0xcf, 0x6c, 0x94, 0x0c, 0xd3, 0xcf, 0x6c, 0x22, 0x79, 0xad, 0xb1, 0xf0, 0xbc, 0x03, 0xa2, 0x46, 0x60, 0xa9, 0xc4, 0x07, 0xc2, 0x21, 0x82, 0xf1, 0xfd, 0xf2, 0xe8, 0x79, 0x32, 0x60, 0xbf, 0xd8, 0xac, 0xa5, 0x22, 0x14, 0x4b, 0xca, 0xc1, 0xd8, 0x4b, 0xeb, 0x7d, 0x3f, 0x57, 0x35, 0xb2, 0xe6, 0x4f, 0x75, 0xb4, 0xb0, 0x60, 0x03, 0x22, 0x53, 0xae, 0x91, 0x79, 0x1d, 0xd6, 0x9b, 0x41, 0x1f, 0x15, 0x86, 0x54, 0x70, 0xb2, 0xde, 0x0d, 0x35, 0x0f, 0x7c, 0xb0, 0x34, 0x72, 0xba, 0x97, 0x60, 0x3b, 0xf0, 0x79, 0xeb, 0xa2, 0xb2, 0x1c, 0x5d, 0xa2, 0x16, 0xb8, 0x87, 0xc5, 0xe9, 0x1b, 0xf6, 0xb5, 0x97, 0x25, 0x6f, 0x38, 0x9f, 0xe3, 0x91, 0xfa, 0x8a, 0x79, 0x98, 0xc3, 0x69, 0x0e, 0xb7, 0xa3, 0x1c, 0x20, 0x05, 0x97, 0xf8, 0xca, 0x14, 0xae, 0x00, 0xd7, 0xc4, 0xf3, 0xc0, 0x14, 0x10, 0x75, 0x6b, 0x34, 0xa0, 0x1b, 0xb5, 0x99, 0x60, 0xf3, 0x5c, 0xb0, 0xc5, 0x57, 0x4e, 0x36, 0xd2, 0x32, 0x84, 0xbf, 0x9e, 0xaa, 0x55, 0x3f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xd0, 0x03, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xd0, 0x63, 0xec, 0x28, 0xf6, 0x7e, 0xba, 0x53, 0xf1, 0x64, 0x2d, 0xbf, 0x7d, 0xff, 0x33, 0xc6, 0xa3, 0x2a, 0xdd, 0x86, 0x9f, 0x60, 0x13, 0xfe, 0x16, 0x2e, 0x2c, 0x32, 0xf1, 0xcb, 0xe5, 0x6d, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x29, 0xc6, 0xeb, 0x52, 0xb4, 0x3c, 0x3a, 0xa1, 0x8b, 0x2c, 0xd8, 0xed, 0x6e, 0xa8, 0x60, 0x7c, 0xef, 0x3c, 0xfa, 0xe1, 0xba, 0xfe, 0x11, 0x65, 0x75, 0x5c, 0xf2, 0xe6, 0x14, 0x84, 0x4a, 0x44, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x90, 0xfb, 0xe7, 0x0e, 0x69, 0xd6, 0x33, 0x40, 0x8d, 0x3e, 0x17, 0x0c, 0x68, 0x32, 0xdb, 0xb2, 0xd2, 0x09, 0xe0, 0x27, 0x25, 0x27, 0xdf, 0xb6, 0x3d, 0x49, 0xd2, 0x95, 0x72, 0xa6, 0xf4, 0x4c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x10, 0x6f, 0xac, 0xea, 0xcf, 0xec, 0xfd, 0x4e, 0x30, 0x3b, 0x74, 0xf4, 0x80, 0xa0, 0x80, 0x98, 0xe2, 0xd0, 0x80, 0x2b, 0x93, 0x6f, 0x8e, 0xc7, 0x74, 0xce, 0x21, 0xf3, 0x16, 0x86, 0x68, 0x9c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x17, 0x4e, 0x3a, 0x0b, 0x5b, 0x43, 0xc6, 0xa6, 0x07, 0xbb, 0xd3, 0x40, 0x4f, 0x05, 0x34, 0x1e, 0x3d, 0xcf, 0x39, 0x62, 0x67, 0xce, 0x94, 0xf8, 0xb5, 0x0e, 0x2e, 0x23, 0xa9, 0xda, 0x92, 0x0c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x2b, 0x99, 0xcf, 0x26, 0x42, 0x2e, 0x92, 0xfe, 0x36, 0x5f, 0xbf, 0x4b, 0xc3, 0x0d, 0x27, 0x08, 0x6c, 0x9e, 0xe1, 0x4b, 0x7a, 0x6f, 0xff, 0x44, 0xfb, 0x2f, 0x6b, 0x90, 0x01, 0x69, 0x99, 0x39, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x2e, 0x70, 0x91, 0x67, 0x86, 0xa6, 0xf7, 0x73, 0x51, 0x1f, 0xa7, 0x18, 0x1f, 0xab, 0x0f, 0x1d, 0x70, 0xb5, 0x57, 0xc6, 0x32, 0x2e, 0xa9, 0x23, 0xb2, 0xa8, 0xd3, 0xb9, 0x2b, 0x51, 0xaf, 0x7d, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x3f, 0xce, 0x9b, 0x9f, 0xdf, 0x3e, 0xf0, 0x9d, 0x54, 0x52, 0xb0, 0xf9, 0x5e, 0xe4, 0x81, 0xc2, 0xb7, 0xf0, 0x6d, 0x74, 0x3a, 0x73, 0x79, 0x71, 0x55, 0x8e, 0x70, 0x13, 0x6a, 0xce, 0x3e, 0x73, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x47, 0xcc, 0x08, 0x61, 0x27, 0xe2, 0x06, 0x9a, 0x86, 0xe0, 0x3a, 0x6b, 0xef, 0x2c, 0xd4, 0x10, 0xf8, 0xc5, 0x5a, 0x6d, 0x6b, 0xdb, 0x36, 0x21, 0x68, 0xc3, 0x1b, 0x2c, 0xe3, 0x2a, 0x5a, 0xdf, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x71, 0xf2, 0x90, 0x6f, 0xd2, 0x22, 0x49, 0x7e, 0x54, 0xa3, 0x46, 0x62, 0xab, 0x24, 0x97, 0xfc, 0xc8, 0x10, 0x20, 0x77, 0x0f, 0xf5, 0x13, 0x68, 0xe9, 0xe3, 0xd9, 0xbf, 0xcb, 0xfd, 0x63, 0x75, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x82, 0xdb, 0x3b, 0xce, 0xb4, 0xf6, 0x08, 0x43, 0xce, 0x9d, 0x97, 0xc3, 0xd1, 0x87, 0xcd, 0x9b, 0x59, 0x41, 0xcd, 0x3d, 0xe8, 0x10, 0x0e, 0x58, 0x6f, 0x2b, 0xda, 0x56, 0x37, 0x57, 0x5f, 0x67, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x8a, 0xd6, 0x48, 0x59, 0xf1, 0x95, 0xb5, 0xf5, 0x8d, 0xaf, 0xaa, 0x94, 0x0b, 0x6a, 0x61, 0x67, 0xac, 0xd6, 0x7a, 0x88, 0x6e, 0x8f, 0x46, 0x93, 0x64, 0x17, 0x72, 0x21, 0xc5, 0x59, 0x45, 0xb9, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x8d, 0x8e, 0xa2, 0x89, 0xcf, 0xe7, 0x0a, 0x1c, 0x07, 0xab, 0x73, 0x65, 0xcb, 0x28, 0xee, 0x51, 0xed, 0xd3, 0x3c, 0xf2, 0x50, 0x6d, 0xe8, 0x88, 0xfb, 0xad, 0xd6, 0x0e, 0xbf, 0x80, 0x48, 0x1c, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xae, 0xeb, 0xae, 0x31, 0x51, 0x27, 0x12, 0x73, 0xed, 0x95, 0xaa, 0x2e, 0x67, 0x11, 0x39, 0xed, 0x31, 0xa9, 0x85, 0x67, 0x30, 0x3a, 0x33, 0x22, 0x98, 0xf8, 0x37, 0x09, 0xa9, 0xd5, 0x5a, 0xa1, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc4, 0x09, 0xbd, 0xac, 0x47, 0x75, 0xad, 0xd8, 0xdb, 0x92, 0xaa, 0x22, 0xb5, 0xb7, 0x18, 0xfb, 0x8c, 0x94, 0xa1, 0x46, 0x2c, 0x1f, 0xe9, 0xa4, 0x16, 0xb9, 0x5d, 0x8a, 0x33, 0x88, 0xc2, 0xfc, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc6, 0x17, 0xc1, 0xa8, 0xb1, 0xee, 0x2a, 0x81, 0x1c, 0x28, 0xb5, 0xa8, 0x1b, 0x4c, 0x83, 0xd7, 0xc9, 0x8b, 0x5b, 0x0c, 0x27, 0x28, 0x1d, 0x61, 0x02, 0x07, 0xeb, 0xe6, 0x92, 0xc2, 0x96, 0x7f, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0xc9, 0x0f, 0x33, 0x66, 0x17, 0xb8, 0xe7, 0xf9, 0x83, 0x97, 0x54, 0x13, 0xc9, 0x97, 0xf1, 0x0b, 0x73, 0xeb, 0x26, 0x7f, 0xd8, 0xa1, 0x0c, 0xb9, 0xe3, 0xbd, 0xbf, 0xc6, 0x67, 0xab, 0xdb, 0x8b, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x64, 0x57, 0x5b, 0xd9, 0x12, 0x78, 0x9a, 0x2e, 0x14, 0xad, 0x56, 0xf6, 0x34, 0x1f, 0x52, 0xaf, 0x6b, 0xf8, 0x0c, 0xf9, 0x44, 0x00, 0x78, 0x59, 0x75, 0xe9, 0xf0, 0x4e, 0x2d, 0x64, 0xd7, 0x45, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x45, 0xc7, 0xc8, 0xae, 0x75, 0x0a, 0xcf, 0xbb, 0x48, 0xfc, 0x37, 0x52, 0x7d, 0x64, 0x12, 0xdd, 0x64, 0x4d, 0xae, 0xd8, 0x91, 0x3c, 0xcd, 0x8a, 0x24, 0xc9, 0x4d, 0x85, 0x69, 0x67, 0xdf, 0x8e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x43, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x6c, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x55, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x51, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x20, 0x00, 0x44, 0x00, 0x56, 0x00, 0x44, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0xe4, 0xaf, 0x65, 0x16, 0xa1, 0x04, 0x06, 0x14, 0x00, 0x83, 0xa5, 0x04, 0x7c, 0x3e, 0x9e, 0x1c, 0x4f, 0xad, 0x65, 0xe0, 0x52, 0x68, 0xd0, 0xb4, 0xd1, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x01, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x07, 0x09, 0x10, 0x10, 0x36, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x47, 0x0c, 0x00, 0x00, 0xcb, 0xb2, 0x19, 0xd7, 0x3a, 0x3d, 0x96, 0x45, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f, 0x64, 0x00, 0x62, 0x00, 0x00, 0x00, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x05, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x30, 0x82, 0x05, 0xd7, 0x30, 0x82, 0x03, 0xbf, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x07, 0x76, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x30, 0x81, 0x88, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x6c, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x55, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x51, 0x00, 0x45, 0x00, 0x4d, 0x00, 0x55, 0x00, 0x20, 0x00, 0x44, 0x00, 0x56, 0x00, 0x44, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x4f, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x51, 0x00, 0x4d, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x02, 0x1f, 0x03, 0x12, 0x0a, 0x00, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7f, 0xff, 0x04, 0x00, 0x4e, 0xac, 0x08, 0x81, 0x11, 0x9f, 0x59, 0x4d, 0x85, 0x0e, 0xe2, 0x1a, 0x52, 0x2c, 0x59, 0xb2, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3d, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x45, 0x00, 0x46, 0x00, 0x49, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x53, 0x00, 0x68, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x04, 0x07, 0x14, 0x00, 0xc9, 0xbd, 0xb8, 0x7c, 0xeb, 0xf8, 0x34, 0x4f, 0xaa, 0xea, 0x3e, 0xe4, 0xaf, 0x65, 0x16, 0xa1, 0x04, 0x06, 0x14, 0x00, 0x83, 0xa5, 0x04, 0x7c, 0x3e, 0x9e, 0x1c, 0x4f, 0xad, 0x65, 0xe0, 0x52, 0x68, 0xd0, 0xb4, 0xd1, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x30, 0x81, 0x91, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x15, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x31, 0x3b, 0x30, 0x39, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x32, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x54, 0x68, 0x69, 0x72, 0x64, 0x20, 0x50, 0x61, 0x72, 0x74, 0x79, 0x20, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x74, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x20, 0x52, 0x6f, 0x6f, 0x74, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x31, 0x30, 0x36, 0x32, 0x34, 0x32, 0x30, 0x34, 0x31, 0x32, 0x39, 0x5a, 0x17, 0x0d, 0x32, 0x36, 0x30, 0x36, 0x32, 0x34, 0x32, 0x30, 0x35, 0x31, 0x32, 0x39, 0x5a, 0x30, 0x81, 0x80, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x55, 0x53, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x08, 0x13, 0x0a, 0x57, 0x61, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x74, 0x6f, 0x6e, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x07, 0x13, 0x07, 0x52, 0x65, 0x64, 0x6d, 0x6f, 0x6e, 0x64, 0x31, 0x1e, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x01, 0x04, 0x14, 0x00, 0x9b, 0x5a, 0x5a, 0x86, 0x5d, 0xb8, 0x4c, 0x47, 0x84, 0x55, 0x65, 0xd1, 0xbe, 0x84, 0x4b, 0xe2, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7f, 0xff, 0x04, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x20, 0x55, 0x45, 0x46, 0x49, 0x20, 0x43, 0x41, 0x20, 0x32, 0x30, 0x31, 0x31, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0xa5, 0x08, 0x6c, 0x4c, 0xc7, 0x45, 0x09, 0x6a, 0x4b, 0x0c, 0xa4, 0xc0, 0x87, 0x7f, 0x06, 0x75, 0x0c, 0x43, 0x01, 0x54, 0x64, 0xe0, 0x16, 0x7f, 0x07, 0xed, 0x92, 0x7d, 0x0b, 0xb2, 0x73, 0xbf, 0x0c, 0x0a, 0xc6, 0x4a, 0x45, 0x61, 0xa0, 0xc5, 0x16, 0x2d, 0x96, 0xd3, 0xf5, 0x2b, 0xa0, 0xfb, 0x4d, 0x49, 0x9b, 0x41, 0x80, 0x90, 0x3c, 0xb9, 0x54, 0xfd, 0xe6, 0xbc, 0xd1, 0x9d, 0xc4, 0xa4, 0x18, 0x8a, 0x7f, 0x41, 0x8a, 0x5c, 0x59, 0x83, 0x68, 0x32, 0xbb, 0x8c, 0x47, 0xc9, 0xee, 0x71, 0xbc, 0x21, 0x4f, 0x9a, 0x8a, 0x7c, 0xff, 0x44, 0x3f, 0x8d, 0x8f, 0x32, 0xb2, 0x26, 0x48, 0xae, 0x75, 0xb5, 0xee, 0xc9, 0x4c, 0x1e, 0x4a, 0x19, 0x7e, 0xe4, 0x82, 0x9a, 0x1d, 0x78, 0x77, 0x4d, 0x0c, 0xb0, 0xbd, 0xf6, 0x0f, 0xd3, 0x16, 0xd3, 0xbc, 0xfa, 0x2b, 0xa5, 0x51, 0x38, 0x5d, 0xf5, 0xfb, 0xba, 0xdb, 0x78, 0x02, 0xdb, 0xff, 0xec, 0x0a, 0x1b, 0x96, 0xd5, 0x83, 0xb8, 0x19, 0x13, 0xe9, 0xb6, 0xc0, 0x7b, 0x40, 0x7b, 0xe1, 0x1f, 0x28, 0x27, 0xc9, 0xfa, 0xef, 0x56, 0x5e, 0x1c, 0xe6, 0x7e, 0x94, 0x7e, 0xc0, 0xf0, 0x44, 0xb2, 0x79, 0x39, 0xe5, 0xda, 0xb2, 0x62, 0x8b, 0x4d, 0xbf, 0x38, 0x70, 0xe2, 0x68, 0x24, 0x14, 0xc9, 0x33, 0xa4, 0x08, 0x37, 0xd5, 0x58, 0x69, 0x5e, 0xd3, 0x7c, 0xed, 0xc1, 0x04, 0x53, 0x08, 0xe7, 0x4e, 0xb0, 0x2a, 0x87, 0x63, 0x08, 0x61, 0x6f, 0x63, 0x15, 0x59, 0xea, 0xb2, 0x2b, 0x79, 0xd7, 0x0c, 0x61, 0x67, 0x8a, 0x5b, 0xfd, 0x5e, 0xad, 0x87, 0x7f, 0xba, 0x86, 0x67, 0x4f, 0x71, 0x58, 0x12, 0x22, 0x04, 0x22, 0x22, 0xce, 0x8b, 0xef, 0x54, 0x71, 0x00, 0xce, 0x50, 0x35, 0x58, 0x76, 0x95, 0x08, 0xee, 0x6a, 0xb1, 0xa2, 0x01, 0xd5, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x82, 0x01, 0x76, 0x30, 0x82, 0x01, 0x72, 0x30, 0x12, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x01, 0x04, 0x05, 0x02, 0x03, 0x01, 0x00, 0x01, 0x30, 0x23, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x15, 0x02, 0x04, 0x16, 0x04, 0x14, 0xf8, 0xc1, 0x6b, 0xb7, 0x7f, 0x77, 0x53, 0x4a, 0xf3, 0x25, 0x37, 0x1d, 0x4e, 0xa1, 0x26, 0x7b, 0x0f, 0x20, 0x70, 0x80, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x13, 0xad, 0xbf, 0x43, 0x09, 0xbd, 0x82, 0x70, 0x9c, 0x8c, 0xd5, 0x4f, 0x31, 0x6e, 0xd5, 0x22, 0x98, 0x8a, 0x1b, 0xd4, 0x30, 0x19, 0x06, 0x09, 0x2b, 0x06, 0x01, 0x04, 0x01, 0x82, 0x37, 0x14, 0x02, 0x04, 0x0c, 0x1e, 0x0a, 0x00, 0x53, 0x00, 0x75, 0x00, 0x62, 0x00, 0x43, 0x00, 0x41, 0x30, 0x0b, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x04, 0x04, 0x03, 0x02, 0x01, 0x86, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x45, 0x66, 0x52, 0x43, 0xe1, 0x7e, 0x58, 0x11, 0xbf, 0xd6, 0x4e, 0x9e, 0x23, 0x55, 0x08, 0x3b, 0x3a, 0x22, 0x6a, 0xa8, 0x30, 0x5c, 0x06, 0x03, 0x55, 0x1d, 0x1f, 0x04, 0x55, 0x30, 0x53, 0x30, 0x51, 0xa0, 0x4f, 0xa0, 0x4d, 0x86, 0x4b, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x6c, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x72, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x6c, 0x30, 0x60, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x01, 0x01, 0x04, 0x54, 0x30, 0x52, 0x30, 0x50, 0x06, 0x08, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x07, 0x30, 0x02, 0x86, 0x44, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x70, 0x6b, 0x69, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x73, 0x2f, 0x4d, 0x69, 0x63, 0x43, 0x6f, 0x72, 0x54, 0x68, 0x69, 0x50, 0x61, 0x72, 0x4d, 0x61, 0x72, 0x52, 0x6f, 0x6f, 0x5f, 0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x35, 0x2e, 0x63, 0x72, 0x74, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x02, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x42, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0xff, 0xff, 0xaa, 0x55, 0x3f, 0x00, 0x07, 0x00, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, 0x00, 0x90, 0x1f, 0x84, 0x7b, 0x8d, 0xbc, 0xeb, 0x97, 0x26, 0x82, 0x6d, 0x88, 0xab, 0x8a, 0xc9, 0x8c, 0x68, 0x70, 0xf9, 0xdf, 0x4b, 0x07, 0xb2, 0x37, 0x83, 0x0b, 0x02, 0xc8, 0x67, 0x68, 0x30, 0x9e, 0xe3, 0xf0, 0xf0, 0x99, 0x4a, 0xb8, 0x59, 0x57, 0xc6, 0x41, 0xf6, 0x38, 0x8b, 0xfe, 0x66, 0x4c, 0x49, 0xe9, 0x37, 0x37, 0x92, 0x2e, 0x98, 0x01, 0x1e, 0x5b, 0x14, 0x50, 0xe6, 0xa8, 0x8d, 0x25, 0x0d, 0xf5, 0x86, 0xe6, 0xab, 0x30, 0xcb, 0x40, 0x16, 0xea, 0x8d, 0x8b, 0x16, 0x86, 0x70, 0x43, 0x37, 0xf2, 0xce, 0xc0, 0x91, 0xdf, 0x71, 0x14, 0x8e, 0x99, 0x0e, 0x89, 0xb6, 0x4c, 0x6d, 0x24, 0x1e, 0x8c, 0xe4, 0x2f, 0x4f, 0x25, 0xd0, 0xba, 0x06, 0xf8, 0xc6, 0xe8, 0x19, 0x18, 0x76, 0x73, 0x1d, 0x81, 0x6d, 0xa8, 0xd8, 0x05, 0xcf, 0x3a, 0xc8, 0x7b, 0x28, 0xc8, 0x36, 0xa3, 0x16, 0x0d, 0x29, 0x8c, 0x99, 0x9a, 0x68, 0xdc, 0xab, 0xc0, 0x4d, 0x8d, 0xbf, 0x5a, 0xbb, 0x2b, 0xa9, 0x39, 0x4b, 0x04, 0x97, 0x1c, 0xf9, 0x36, 0xbb, 0xc5, 0x3a, 0x86, 0x04, 0xae, 0xaf, 0xd4, 0x82, 0x7b, 0xe0, 0xab, 0xde, 0x49, 0x05, 0x68, 0xfc, 0xf6, 0xae, 0x68, 0x1a, 0x6c, 0x90, 0x4d, 0x57, 0x19, 0x3c, 0x64, 0x66, 0x03, 0xf6, 0xc7, 0x52, 0x9b, 0xf7, 0x94, 0xcf, 0x93, 0x6a, 0xa1, 0x68, 0xc9, 0xaa, 0xcf, 0x99, 0x6b, 0xbc, 0xaa, 0x5e, 0x08, 0xe7, 0x39, 0x1c, 0xf7, 0xf8, 0x0f, 0xba, 0x06, 0x7e, 0xf1, 0xcb, 0xe8, 0x76, 0xdd, 0xfe, 0x22, 0xda, 0xad, 0x3a, 0x5e, 0x5b, 0x34, 0xea, 0xb3, 0xc9, 0xe0, 0x4d, 0x04, 0x29, 0x7e, 0xb8, 0x60, 0xb9, 0x05, 0xef, 0xb5, 0xd9, 0x17, 0x58, 0x56, 0x16, 0x60, 0xb9, 0x30, 0x32, 0xf0, 0x36, 0x4a, 0xc3, 0xf2, 0x79, 0x8d, 0x12, 0x40, 0x70, 0xf3, 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x7b, 0x30, 0x79, 0x30, 0x09, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x04, 0x02, 0x30, 0x00, 0x30, 0x2c, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x01, 0x0d, 0x04, 0x1f, 0x16, 0x1d, 0x4f, 0x70, 0x65, 0x6e, 0x53, 0x53, 0x4c, 0x20, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e, 0x04, 0x16, 0x04, 0x14, 0x3c, 0xe9, 0x60, 0xe3, 0xff, 0x19, 0xa1, 0x0a, 0x7b, 0xa3, 0x42, 0xf4, 0x8d, 0x42, 0x2e, 0xb4, 0xd5, 0x9c, 0x72, 0xec, 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x3c, 0xe9, 0x60, 0xe3, 0xff, 0x19, 0xa1, 0x0a, 0x7b, 0xa3, 0x42, 0xf4, 0x8d, 0x42, 0x2e, 0xb4, 0xd5, 0x9c, 0x72, 0xec, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00, 0x5c, 0x4d, 0x92, 0x88, 0xb4, 0x82, 0x5f, 0x1d, 0xad, 0x8b, 0x11, 0xec, 0xdf, 0x06, 0xa6, 0x7a, 0xa5, 0x2b, 0x9f, 0x37, 0x55, 0x0c, 0x8d, 0x6e, 0x05, 0x00, 0xad, 0xb7, 0x0c, 0x41, 0x89, 0x69, 0xcf, 0xd6, 0x65, 0x06, 0x9b, 0x51, 0x78, 0xd2, 0xad, 0xc7, 0xbf, 0x9c, 0xdc, 0x05, 0x73, 0x7f, 0xe7, 0x1e, 0x39, 0x13, 0xb4, 0xea, 0xb6, 0x30, 0x7d, 0x40, 0x75, 0xab, 0x9c, 0x43, 0x0b, 0xdf, 0xb0, 0xc2, 0x1b, 0xbf, 0x30, 0xe0, 0xf4, 0xfe, 0xc0, 0xdb, 0x62, 0x21, 0x98, 0xf6, 0xc5, 0xaf, 0xde, 0x3b, 0x4f, 0x49, 0x0a, 0xe6, 0x1e, 0xf9, 0x86, 0xb0, 0x3f, 0x0d, 0xd6, 0xd4, 0x46, 0x37, 0xdb, 0x54, 0x74, 0x5e, 0xff, 0x11, 0xc2, 0x60, 0xc6, 0x70, 0x58, 0xc5, 0x1c, 0x6f, 0xec, 0xb2, 0xd8, 0x6e, 0x6f, 0xc3, 0xbc, 0x33, 0x87, 0x38, 0xa4, 0xf3, 0x44, 0x64, 0x9c, 0x34, 0x3b, 0x28, 0x94, 0x26, 0x78, 0x27, 0x9f, 0x16, 0x17, 0xe8, 0x3b, 0x69, 0x0a, 0x25, 0xa9, 0x73, 0x36, 0x7e, 0x9e, 0x37, 0x5c, 0xec, 0xe8, 0x3f, 0xdb, 0x91, 0xf9, 0x12, 0xb3, 0x3d, 0xce, 0xe7, 0xdd, 0x15, 0xc3, 0xae, 0x8c, 0x05, 0x20, 0x61, 0x9b, 0x95, 0xde, 0x9b, 0xaf, 0xfa, 0xb1, 0x5c, 0x1c, 0xe5, 0x97, 0xe7, 0xc3, 0x34, 0x11, 0x85, 0xf5, 0x8a, 0x27, 0x26, 0xa4, 0x70, 0x36, 0xec, 0x0c, 0xf6, 0x83, 0x3d, 0x90, 0xf7, 0x36, 0xf3, 0xf9, 0xf3, 0x15, 0xd4, 0x90, 0x62, 0xbe, 0x53, 0xb4, 0xaf, 0xd3, 0x49, 0xaf, 0xef, 0xf4, 0x73, 0xe8, 0x7b, 0x76, 0xe4, 0x44, 0x2a, 0x37, 0xba, 0x81, 0xa4, 0x99, 0x0c, 0x3a, 0x31, 0x24, 0x71, 0xa0, 0xe4, 0xe4, 0xb7, 0x1a, 0xcb, 0x47, 0xe4, 0xaa, 0x22, 0xcf, 0xef, 0x75, 0x61, 0x80, 0xe3, 0x43, 0xb7, 0x48, 0x57, 0x73, 0x11, 0x3d, 0x78, 0x9b, 0x69, 0xa1, 0x59, 0xc0, 0xa5, 0xe4, 0x94, 0xa7, 0x4a, 0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x05, 0x00, 0x00, 0xbd, 0x9a, 0xfa, 0x77, 0x59, 0x03, 0x32, 0x4d, 0xbd, 0x60, 0x28, 0xf4, 0xe7, 0x8f, 0x78, 0x4b, 0x30, 0x82, 0x05, 0xe8, 0x30, 0x82, 0x03, 0xd0, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x0a, 0x61, 0x0a, 0xd1, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xd2, 0x11, 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d, 0x7f, 0x01, 0x04, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xff, 0xaa, 0x55, 0x3c, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x61, 0xdf, 0xe4, 0x8b, 0xca, 0x93, 0xd2, 0x11, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c, 0x45, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4f, 0x00, 0x75, 0x00, 0x74, 0x00, 0x00, 0x00, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x03, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x06, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x0c, 0x00, 0xd0, 0x41, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x03, 0x0a, 0x14, 0x00, 0x53, 0x47, 0xc1, 0xe0, 0xbe, 0xf9, 0xd2 ]) python-uefivars-1.0.0/pyuefivars/edk2.py000066400000000000000000000273321440020125500202470ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import struct import tempfile import os from .aws_file import * from .varstore import * class EDK2Cert(object): def __init__(self, name: str, guid: bytes, digest: bytes): self.name = name self.guid = guid self.digest = digest class EDK2CertDB(object): GUID_CERTDB = b'\x6e\xe5\xbe\xd9\xdc\x75\xd9\x49\xb4\xd7\xb5\x34\x21\x0f\x63\x7a' def __init__(self, uefivar: UEFIVar = None): self.certs = [] if uefivar != None: self.init_from_var(uefivar) def init_from_var(self, uefivar: UEFIVar): file = tempfile.SpooledTemporaryFile() file.write(uefivar.data) file.seek(0, os.SEEK_SET) file = AWSVarStoreFile(file) size = file.read32() if size != len(uefivar.data): raise Exception("Invalid certdb length") size = size - 4 while size != 0: guid = file.readguid() cert_node_size = file.read32() name_size = file.read32() * 2 digest_size = file.read32() name = file.read(name_size).decode('utf-16le').rstrip('\0') digest = file.read(digest_size) self.certs.append(EDK2Cert(name, guid, digest)) size = size - (16 + 4 + 4 + 4 + name_size + digest_size) def to_var(self, vars: UEFIVar): file = tempfile.SpooledTemporaryFile() file = AWSVarStoreFile(file) file.write32(0) # file size, gets patched in later pubkeyidx = 0 for var in vars: if not var.digest: continue name_size = len(var.name) + 1 digest_size = len(var.digest) file.writeguid(var.guid) file.write32(16 + 4 + 4 + 4 + name_size + digest_size) file.write32(name_size) file.write32(digest_size) file.write(var.name.encode('utf-16le') + b'\0\0') file.write(var.digest) var.pubkeyidx = pubkeyidx pubkeyidx = pubkeyidx + 1 filesize = file.file.tell() file.file.seek(0, os.SEEK_SET) file.write32(filesize) file.file.seek(0, os.SEEK_SET) data = file.file.read() return UEFIVar("certdb", data, self.GUID_CERTDB, 0x7) class EDK2UEFIVarStore(UEFIVarStore): GUID_CERTDB = b'\x6e\xe5\xbe\xd9\xdc\x75\xd9\x49\xb4\xd7\xb5\x34\x21\x0f\x63\x7a' GUID_NVFS = b'\x8d\x2b\xf1\xff\x96\x76\x8b\x4c\xa9\x85\x27\x47\x07\x5b\x4f\x50' GUID_VARSTORE = b'\x78\x2c\xf3\xaa\x7b\x94\x9a\x43\xa1\x80\x2e\x14\x4e\xc3\x77\x92' STATE_SETTLED = 0x3f VARSTORE_STATUS = b'\x5a\xfe\x00\x00\x00\x00\x00\x00' DEFAULT_FILE_LEN = 540672 HEADER_LENGTH = 0x48 EFI_FVB2_READ_DISABLED_CAP = 0x00000001 EFI_FVB2_READ_ENABLED_CAP = 0x00000002 EFI_FVB2_READ_STATUS = 0x00000004 EFI_FVB2_WRITE_DISABLED_CAP = 0x00000008 EFI_FVB2_WRITE_ENABLED_CAP = 0x00000010 EFI_FVB2_WRITE_STATUS = 0x00000020 EFI_FVB2_LOCK_CAP = 0x00000040 EFI_FVB2_LOCK_STATUS = 0x00000080 EFI_FVB2_STICKY_WRITE = 0x00000200 EFI_FVB2_MEMORY_MAPPED = 0x00000400 EFI_FVB2_ERASE_POLARITY = 0x00000800 EFI_FVB2_READ_LOCK_CAP = 0x00001000 EFI_FVB2_READ_LOCK_STATUS = 0x00002000 EFI_FVB2_WRITE_LOCK_CAP = 0x00004000 EFI_FVB2_WRITE_LOCK_STATUS = 0x00008000 EFI_FVB2_ALIGNMENT = 0x001F0000 EFI_FVB2_WEAK_ALIGNMENT = 0x80000000 EFI_FVB2_ALIGNMENT_1 = 0x00000000 EFI_FVB2_ALIGNMENT_2 = 0x00010000 EFI_FVB2_ALIGNMENT_4 = 0x00020000 EFI_FVB2_ALIGNMENT_8 = 0x00030000 EFI_FVB2_ALIGNMENT_16 = 0x00040000 EFI_FVB2_ALIGNMENT_32 = 0x00050000 EFI_FVB2_ALIGNMENT_64 = 0x00060000 EFI_FVB2_ALIGNMENT_128 = 0x00070000 EFI_FVB2_ALIGNMENT_256 = 0x00080000 EFI_FVB2_ALIGNMENT_512 = 0x00090000 EFI_FVB2_ALIGNMENT_1K = 0x000A0000 EFI_FVB2_ALIGNMENT_2K = 0x000B0000 EFI_FVB2_ALIGNMENT_4K = 0x000C0000 EFI_FVB2_ALIGNMENT_8K = 0x000D0000 EFI_FVB2_ALIGNMENT_16K = 0x000E0000 EFI_FVB2_ALIGNMENT_32K = 0x000F0000 EFI_FVB2_ALIGNMENT_64K = 0x00100000 EFI_FVB2_ALIGNMENT_128K = 0x00110000 EFI_FVB2_ALIGNMENT_256K = 0x00120000 EFI_FVB2_ALIGNMENT_512K = 0x00130000 EFI_FVB2_ALIGNMENT_1M = 0x00140000 EFI_FVB2_ALIGNMENT_2M = 0x00150000 EFI_FVB2_ALIGNMENT_4M = 0x00160000 EFI_FVB2_ALIGNMENT_8M = 0x00170000 EFI_FVB2_ALIGNMENT_16M = 0x00180000 EFI_FVB2_ALIGNMENT_32M = 0x00190000 EFI_FVB2_ALIGNMENT_64M = 0x001A0000 EFI_FVB2_ALIGNMENT_128M = 0x001B0000 EFI_FVB2_ALIGNMENT_256M = 0x001C0000 EFI_FVB2_ALIGNMENT_512M = 0x001D0000 EFI_FVB2_ALIGNMENT_1G = 0x001E0000 EFI_FVB2_ALIGNMENT_2G = 0x001F0000 def __init__(self, data): super().__init__() self.certdb = EDK2CertDB() self.filelen = len(data) # Get a streaming file object file = tempfile.SpooledTemporaryFile() file.write(data) file.seek(0, os.SEEK_SET) file = AWSVarStoreFile(file) # Validate header zerovector = file.read(0x10) if zerovector != b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0': raise Exception("Invalid Zero Vector: %s" % zerovector) fsguid = file.readguid() if fsguid != self.GUID_NVFS: raise Exception("Invalid GUID: %s" % fsguid) self.length = file.read64() sig = file.read(4) if sig != b'_FVH': raise Exception('Invalid FVH signature: %s' % sig) self.attrs = file.read32() hlength = file.read16() if hlength != self.HEADER_LENGTH: raise Exception('Invalid FVH Header Length: 0x%x' % hlength) csum_hdr = file.read16() if (self.csum16(data[:self.HEADER_LENGTH]) != 0): raise Exception("Invalid header checksum: 0x%x" % csum_hdr) file.read(3) rev = file.read8() if rev != 0x2: raise Exception('Invalid FVH Revision: 0x%x' % rev) file.read(0x10) vsguid = file.readguid() if vsguid != self.GUID_VARSTORE: raise Exception('Invalid Varstore GUID: %s' % vsguid) self.varsize = file.read32() status = file.read(8) if status != self.VARSTORE_STATUS: raise Exception('Invalid Varstore Status: %s' % status) # Extract all variables while file.read16() == 0x55aa: state = file.read8() file.read8() attr = file.read32() monotoniccount = file.read64() timestamp = file.readtimestamp() pubkeyidx = file.read32() namelen = file.read32() datalen = file.read32() guid = file.readguid() name = file.read(namelen).decode('utf-16le').rstrip('\0') data = file.read(datalen) if state == self.STATE_SETTLED: if timestamp == self.EMPTY_TIMESTAMP: timestamp = None var = UEFIVar(name, data, guid, attr, timestamp, None) if name == "certdb" and guid == self.GUID_CERTDB: self.certdb = EDK2CertDB(var) else: self.vars.append(var) file.file.seek((file.file.tell() + 0x3) & ~0x3, os.SEEK_SET) # Extract all certdb entries into digest fields for cert in self.certdb.certs: for var in self.vars: if var.name == cert.name and var.guid == cert.guid: var.digest = cert.digest def csum16(self, var : bytes): u16 = struct.unpack("<" + str(int(len(var) / 2)) + "H", var) csum = 0 for b in u16: #print("0x%x + 0x%x = 0x%x" % (csum, b, csum + b)) csum = csum + b return (csum & 0xffff) def write_var(self, raw : AWSVarStoreFile, var : UEFIVar): raw.write16(0x55aa) raw.write8(self.STATE_SETTLED) raw.write8(0) raw.write32(var.attr) raw.write64(0) # monotonic count if var.timestamp: raw.write(var.timestamp) else: raw.write(b'\0' * 16) if hasattr(var, 'pubkeyidx'): raw.write32(var.pubkeyidx) else: raw.write32(0) raw.write32(len(var.name + '\0') * 2) raw.write32(len(var.data)) raw.write(var.guid) raw.write((var.name + '\0').encode('utf-16le')) raw.write(var.data) raw.file.seek((raw.file.tell() + 0x3) & ~0x3, os.SEEK_SET) def __bytes__(self) -> bytes: if not hasattr(self, 'certdb'): self.certdb = EDK2CertDB() if not hasattr(self, 'filelen'): self.filelen = self.DEFAULT_FILE_LEN if not hasattr(self, 'attrs'): self.attrs = self.EFI_FVB2_READ_DISABLED_CAP | \ self.EFI_FVB2_READ_ENABLED_CAP | \ self.EFI_FVB2_READ_STATUS | \ self.EFI_FVB2_WRITE_DISABLED_CAP | \ self.EFI_FVB2_WRITE_ENABLED_CAP | \ self.EFI_FVB2_WRITE_STATUS | \ self.EFI_FVB2_LOCK_CAP | \ self.EFI_FVB2_LOCK_STATUS | \ self.EFI_FVB2_STICKY_WRITE | \ self.EFI_FVB2_MEMORY_MAPPED | \ self.EFI_FVB2_ERASE_POLARITY | \ self.EFI_FVB2_READ_LOCK_CAP | \ self.EFI_FVB2_READ_LOCK_STATUS | \ self.EFI_FVB2_WRITE_LOCK_CAP | \ self.EFI_FVB2_WRITE_LOCK_STATUS | \ self.EFI_FVB2_ALIGNMENT_16 if not hasattr(self, 'varsize'): self.varsize = int(self.filelen / 2) - 8264 # Assemble the flash file raw = AWSVarStoreFile(tempfile.SpooledTemporaryFile()) raw.write(b'\0' * 16) raw.write(self.GUID_NVFS) raw.write64(self.filelen) raw.write(b'_FVH') raw.write32(self.attrs) raw.write16(self.HEADER_LENGTH) csum_pos = raw.file.tell() raw.write16(0) # checksum - need to fill in later raw.write(b'\0' * 3) raw.write8(0x2) # revision raw.write(b'\x84\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') raw.write(self.GUID_VARSTORE) raw.write32(self.varsize) raw.write(self.VARSTORE_STATUS) header_end_pos = raw.file.tell() self.write_var(raw, self.certdb.to_var(self.vars)) for var in self.vars: self.write_var(raw, var) if raw.file.tell() > self.filelen: raise Exception("Can not fit variables into store") # Expand to maximum file size raw.file.seek(self.filelen - 1, os.SEEK_SET) raw.write8(0) # Calculate checksums raw.file.seek(0, os.SEEK_SET) full = raw.file.read() raw.file.seek(csum_pos, os.SEEK_SET) raw.write16((0x10000 - self.csum16(full[:self.HEADER_LENGTH])) & 0xffff) raw.file.seek(0, os.SEEK_SET) return raw.file.read() def set_output_options(self, options): for option in [option.strip().split("=") for option in options]: if option[0] == 'filesize': if(len(option) != 2 or not option[1]): raise SystemExit( 'option "filesize" requires a second argument' ) self.filelen = int(option[1]) * 1024 else: raise SystemExit( 'Unknown Option type "{}"'.format(option) ) python-uefivars-1.0.0/pyuefivars/json.py000066400000000000000000000042771440020125500203760ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import base64 import json import uuid from .varstore import * class JSONVar(UEFIVar): def __init__(self, jvar): var = {} name = jvar['name'] data = bytes.fromhex(jvar['data']) guid = uuid.UUID(jvar['guid']).bytes_le attr = int(jvar['attr']) timestamp = None digest = None if 'timestamp' in jvar: timestamp = bytes.fromhex(jvar['timestamp']) if 'digest' in jvar: digest = bytes.fromhex(jvar['digest']) super().__init__(name, data, guid, attr, timestamp, digest) def __dict__(self): super().__dict__() class JSONUEFIVarStore(UEFIVarStore): current_version = 2 def __init__(self, data): super().__init__() # Read the JSON file jdata = json.loads(data.decode('utf-8')) vardata = [] if isinstance(jdata, list): self.version = 1 vardata = jdata else: self.version = jdata.get('version', self.current_version) vardata = jdata.get('variables', []) if self.version > self.current_version: raise SystemExit( 'Unknown Version "{}", this tool only supports up to version "{}"'.format(self.version, self.current_version) ) # Copy all JSON elements to the UEFIVars for the store for jvar in vardata: new_var = JSONVar(jvar) new_var.__class__ = UEFIVar self.vars.append(new_var) def __bytes__(self): return self.__str__().encode('utf-8') def prepare(self, var): new_var = var.__dict__() if 'guid' in new_var: new_var["guid"] = str(uuid.UUID(bytes_le=var.guid)) for key in new_var: if isinstance(new_var[key], bytes): new_var[key] = new_var[key].hex() return new_var def __str__(self): encoded_vars = list(map(self.prepare, self.vars)) store = { "version": self.current_version, "variables": encoded_vars, } return json.dumps(store, indent=4) python-uefivars-1.0.0/pyuefivars/varstore.py000066400000000000000000000024261440020125500212640ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import sys class UEFIVar(object): def __init__(self, name: str, data: bytes, guid: bytes, attr: int, timestamp: bytes = None, digest: bytes = None): self.name = name self.data = data self.guid = guid self.attr = attr self.timestamp = timestamp self.digest = digest def __dict__(self): var = {} var['name'] = self.name var['data'] = self.data var['guid'] = self.guid var['attr'] = self.attr if self.timestamp != None: var['timestamp'] = self.timestamp if self.digest != None: var['digest'] = self.digest return var class UEFIVarStore(object): EMPTY_TIMESTAMP = b'\0' * 16 EMPTY_DIGEST = b'\0' * 32 def __init__(self, data=''): self.vars = [] def __dict__(self): return self.vars def __bytes__(self): print("This output backend does not implement writing the variable store", file=sys.stderr) sys.exit() def set_output_options(self, options): print("This output backend does not implement output options: {}".format(options), file=sys.stderr) sys.exit() python-uefivars-1.0.0/setup.py000066400000000000000000000015161440020125500163610ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import setuptools with open("README.md", "r") as fh: long_description = fh.read() setuptools.setup( name="pyuefivars", version="0.1", author="Amazon Web Services", author_email="graf@amazon.com", description="UEFI variable store tools", long_description=long_description, url="https://github.com/awslabs/python-uefivars", packages=setuptools.find_packages(), install_requires=[ 'google-crc32c' ], entry_points={ 'console_scripts': [ 'uefivars.py = pyuefivars:main', ], }, classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ], ) python-uefivars-1.0.0/snap/000077500000000000000000000000001440020125500156055ustar00rootroot00000000000000python-uefivars-1.0.0/snap/snapcraft.yaml000066400000000000000000000006761440020125500204630ustar00rootroot00000000000000name: uefivars version: git summary: Create a binary blob containing a pre-filled variable store description: | Create a binary blob containing a pre-filled variable store base: core22 confinement: strict source-code: https://github.com/awslabs/python-uefivars issues: https://github.com/awslabs/python-uefivars/issues parts: uefivars: plugin: python source: . apps: uefivars: command: bin/uefivars.py plugs: - home python-uefivars-1.0.0/uefivars.py000077500000000000000000000003031440020125500170410ustar00rootroot00000000000000#!/usr/bin/env python3 # # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT import pyuefivars if __name__ == '__main__': pyuefivars.main()